코딩테스트

python 문법 (까먹거나 새롭게 알게된 것)

  1. 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)
  1. 배열 체크 ```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)

재귀함수

  • 자기자신을 반복적으로 부르는 행동
  • 마지막 조건을 설정하는 것이 중요함

recursive_call

def recur(n):
    if n < 1:
        return 1
    recur(n - 1)
    print(n)

n = 3
recur(n)

1장 컴퓨터 시스템

hello 프로그램 실행

그림 참조

shell_to_memory

disk_to_memory

show_display

캐시

  1. 지역성 메모리
  2. 자주 접근되는 데이터 저장소

memory_hierarchy

운영체제

  • 하드웨어와 소프트웨어 사이에 존재하는 소프트웨어
  1. 응용프로그램들이 제멋대로 동작하는 것을 막기위해
  2. 복잡한 저수준 하드웨어 장치들을 조작하기 위해

운영체제 추상화

  • 포식스: IEEE에서 명명한 유닉스 표준
  1. 입출력장치 - Files 추상화
  2. 메인메모리 + 입출력장치 - Virual Memory 추상화
  3. 메인메모리 + 입출력장치 + 프로세서 - Processes 추상화

프로세스

프로세서가 실행하는 운영체제 추상화 - 여러개 가능

  • 동시: 문맥전환(Context Switching) 방법을 통해 교차 실행
  • 컨텍스트(Context) - PC, 레지스터 파일, 메인 메모리의 현재값

동시성 프로세스

  • 프로세스 A -> B
    1. 프로세스와 컨텍스트를 생성
    2. 컨텍스트를 넘김 (프로세스 A의 제어권 넘어감)
  • 프로세스 A <- B
    1. 컨텍스트를 다시 넘김 (프로세스 A의 제어권 복구)

쓰레드(Thread) 각각의 쓰레드는 해당 프로세스의 컨텍스트에서 실행된다. 동일한 코드와 전역 데이터를 공유한다.

가상 메모리

각 프로세스는 가상주소 공간이라는 균일한 메모리의 모습을 지님

  1. 최상위 영역: 프로세스가 공통으로 사용하는 운영체제의 코드와 데이터를 위한 공간
  2. 힙(런타임 힙): 동적 공간
  3. 공유라이브러리: C 표준라이브러리, 수학 라이브러리 등의 공간
  4. 스택: 함수 호출을 구현하기 위해 사용하는 공간 (동적)
  5. 커널 가상메모리: 주소공간 맨 윗 부분, 응용프로그램들은 접근금지인 공간

파일

연속된 바이트들, 모든 입출력 장치들은 파일로 모델링한다.

동시성과 병렬성

  • 동시성: 다수의 동시에 일어나는 일을 갖는 시스템
  • 병렬성: 동시성을 이용해 시스템을 좀 더 빨리 만드는 기술

댓글남기기