TIL 3일차
코딩테스트
python 문법 (까먹거나 새롭게 알게된 것)
for-else
문 ```python numbers = [1, 3, 5, 7]
for num in numbers: if num == 10: print(‘nums에 10이 포함되어 있습니다.’, num) else: print(‘nums에 10이 포함되어 있지 않습니다.’, num)
2. `in` 연산자
```python
numbers = [1, 5, 6, 7, 8]
find_number = 5
if find_number in numbers:
print('5는 numbers 안에 포함되어 있습니다.', find_number)
- 배열 체크 ```python numbers = []
if numbers: # 배열 안에 요소가 있으면 print(‘배열 안에 요소가 있습니다.’, numbers)
if not numbers: # 배열 안에 요소가 없으면 print(‘배열 안에 요소가 없습니다.’, numbers)
4. 리스트컴프리핸션
```python
arrays = [0 for _ in range(100)]
print(arrays)
에라토스테네스의 체
에라토스테네스라는 수학자가 만든 기법 (뜰채 같은 걸로 거른다고 생각하면됨)
- 2, 3, 5, 7을 제외한 나머지 수 중에 2, 3, 5, 7의 배수를 제거하는 방식
n = 1000 # 시행횟수
is_prime_nums = [False,False] + [True]*(n-1)
primes = []
for i in range(2,n+1):
if is_prime_nums[i]:
primes.append(i)
for j in range(2*i, n+1, i):
is_prime_nums[j] = False
print(primes)
n = 1000 # 시행 횟수
prime_numbers = []
for check_num in range(2, n + 1):
for check_prime in range(2, check_num):
if check_num % check_prime == 0:
break
else:
prime_numbers.append(check_num)
print(prime_numbers)
재귀함수
- 자기자신을 반복적으로 부르는 행동
- 마지막 조건을 설정하는 것이 중요함
def recur(n):
if n < 1:
return 1
recur(n - 1)
print(n)
n = 3
recur(n)
1장 컴퓨터 시스템
hello 프로그램 실행
그림 참조
캐시
- 지역성 메모리
- 자주 접근되는 데이터 저장소
운영체제
- 하드웨어와 소프트웨어 사이에 존재하는 소프트웨어
- 응용프로그램들이 제멋대로 동작하는 것을 막기위해
- 복잡한 저수준 하드웨어 장치들을 조작하기 위해
운영체제 추상화
- 포식스: IEEE에서 명명한 유닉스 표준
- 입출력장치 - Files 추상화
- 메인메모리 + 입출력장치 - Virual Memory 추상화
- 메인메모리 + 입출력장치 + 프로세서 - Processes 추상화
프로세스
프로세서가 실행하는 운영체제 추상화 - 여러개 가능
- 동시: 문맥전환(Context Switching) 방법을 통해 교차 실행
- 컨텍스트(Context) - PC, 레지스터 파일, 메인 메모리의 현재값
동시성 프로세스
- 프로세스 A -> B
- 프로세스와 컨텍스트를 생성
- 컨텍스트를 넘김 (프로세스 A의 제어권 넘어감)
- 프로세스 A <- B
- 컨텍스트를 다시 넘김 (프로세스 A의 제어권 복구)
쓰레드(Thread) 각각의 쓰레드는 해당 프로세스의 컨텍스트에서 실행된다. 동일한 코드와 전역 데이터를 공유한다.
가상 메모리
각 프로세스는 가상주소 공간이라는 균일한 메모리의 모습을 지님
- 최상위 영역: 프로세스가 공통으로 사용하는 운영체제의 코드와 데이터를 위한 공간
- 힙(런타임 힙): 동적 공간
- 공유라이브러리: C 표준라이브러리, 수학 라이브러리 등의 공간
- 스택: 함수 호출을 구현하기 위해 사용하는 공간 (동적)
- 커널 가상메모리: 주소공간 맨 윗 부분, 응용프로그램들은 접근금지인 공간
파일
연속된 바이트들, 모든 입출력 장치들은 파일로 모델링한다.
동시성과 병렬성
- 동시성: 다수의 동시에 일어나는 일을 갖는 시스템
- 병렬성: 동시성을 이용해 시스템을 좀 더 빨리 만드는 기술
댓글남기기