3.1 운영체제와 컴퓨터
운영체제의 역할
- CPU 스케줄링과 프로세스 관리
- 메모리 관리
- 디스크 파일 관리
- I/O 디바이스 관리
System Call: 시스템 콜이란 운영체제가 커널에 접근하기 위한 인터페이스이며, 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 사용. 유저 프로그램이 I/O request로 trap을 발동하면 올바른 I/O request인지 확인한 후 유저 모드가 시스템 콜을 통해 커널 모드로 변환되어 실행됨.
- CPU: Central Processing Unit. 산술논리 연산장치, 제어장치, 레지스터로 구성되어 있는 컴퓨터 장치. interrupt에 의해 단순히 메모리에 존재하는 명령어를 해석해서 실행.
- 산술논리 연산장치: ALU(Arithmetic Logic Unit). 논리 연산을 계산하는 디지털 회로.
- 제어장치: CU(Control Unit). 프로세스 조작을 지시하는 CPU의 한 부품.
- 레지스터: CPU 안에 있는 임시 기억 장치.
※ interrupt: I/O 디바이스로 인한 interrupt, 0으로 숫자를 나누는 산술 연산에서의 interrupt, 프로세스 오류 등으로 발생.
- H/W interrupt: I/O 디바이스에서 발생하는 interrupt
- S/W interrupt: trap. 프로세스가 시스템 콜을 호출할 때 발동.
- DMA 컨트롤러: I/O 디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치. CPU 부하를 덜어줌.
- 메모리: 보통 RAM(Random Access Memory)를 칭함.
3.2 메모리
캐시: 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리.
- 캐시 히트: 캐시에서 원하는 데이터를 찾은 경우
- 캐시 미스: 찾는 데이터가 캐시에 없어 주 메모리로 가서 데이터를 찾아오는 경우
※ 웹 브라우저의 캐시
- 쿠키: 만료기한이 있는 키-값 저장소.
- 로컬 스토리지: 만료기간이 없는 키-값 저장소. 도메인 단위. 브라우저를 닫아도 유지.
- 세션 스토리지: 만료기간이 없는 키-값 저장소. 탭 단위. 탭을 닫으면 데이터 삭제.
※ 데이터베이스의 캐싱 계층: 메인 데이터베이스 위에 redis 데이터베이스를 캐싱 계층으로 둬서 성능을 향상시키기도 함.
메모리 관리
- 가상 메모리: 페이지 테이블로 관리. 속도 향상을 위해 TLB 사용.
※ 페이지 테이블: logical address와 physical address가 매핑되어 있고 프로세스의 주소 정보가 들어있음
※ TLB: 메모리와 cpu와 메모리 사이에 있는 주소 변환을 위한 캐시.
※ 스와핑: 가상 메모리에는 존재하지만 실제 메모리인 RAM에는 현재 없는 데이터나 코드에 접근할 경우 page fault 발생. 이를 방지하기 위해 당장 사용하지 않는 영역을 하드 디스크로 내리고 필요할 때 RAM으로 올리는 것.
※ 스레싱: thrashing. 메모리의 page fault율이 높은 것. working set, PFF로 해결.
- working set: 프로세스의 과거 사용 이력인 locality를 통해 결정된 페이지 집합을 만들어서 미리 메모리에 로드하는 것.
- PFF(Page Fault Frequency): Page fault 빈도를 조절하는 방법. 상한선과 하한선을 설정하여 상한선에 도달하면 페이지를 늘리고 하한선에 도달하면 페이지를 줄임.
메모리 할당
- 연속 할당
- 고정 분할 방식: 내부 단편화 발생
- 가변 분할 방식: 내부 단편화 발생하지 않음. 외부 단편화 발생.
- 불연속 할당
- 페이징: 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스 할당. 홀의 크기가 균일하지 않은 문제가 없어지지만 주소 변환이 복잡해짐.
- 세그멘테이션: 의미 단위인 세그먼트로 나누는 방식.
- 페이지드 세그멘테이션: 공유나 보안을 의미 단위의 세그먼트로 나누고, 물리적 메모리는 페이지로 나누는 것.
※ 페이지 교체 알고리즘: 스와핑을 최소화하는 것이 목적
- 오프라인 알고리즘: 먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘. 먼 미래에 참조되는 페이지를 파악하기 힘듦.
- FIFO: 가장 먼저 들어온 페이지가 가장 먼저 교체되도록 함.
- LRU: 참조된 지 가자 오래된 페이지를 교체.
3.3 프로세스와 스레드
프로세스 상태
- 생성 상태: fork() 또는 exec() 함수를 통해 생성된 상태. 이때 PCB 할당.
- fork(): 부모 프로세스의 주소 공간을 그대로 복사. 새로운 자식 프로세스 생성.
- exec(): 새롭게 프로세스 생성.
- 대기 상태: CPU 스케줄러로부터 CPU 소유권이 넘어오기를 기다리는 상태.
- 대기 중단 상태: 메모리 부족으로 일시 중단된 상태.
- 실행 상태: CPU 소유권과 메모리를 할당받고 Instruction을 수행 중인 상태.
- 중단 상태: 어떤 이벤트의 발생 이후 프로세스가 차단된 상태. I/O 디바이스에 의한 interrupt로 많이 발생.
- 일시 중단 상태: 중단된 상태에서 프로세스가 실행되려 했지만 메모리 부족으로 일시 중단된 상태.
- 종료 상태: 메모리와 CPU 소유권을 모두 놓고 가는 상태.
- 스택: 지역변수, 매개변수, 함수 저장. 컴파일 시에 크기 결정.
- 힙: 런타임 시에 크기 결정.
- 데이터 영역: 전역 변수, 정적 변수 저장.
- 코드 영역: 프로그램에 내장되어 있는 소스코드가 들어가는 영역.
※ PCB: Process Control Block
- 프로세스 스케줄링 상태
- PID
- 프로세스 권한
- PC(Program Counter)
- CPU Register
- CPU 스케줄링 정보
- 계정 정보
- I/O 상태 정보
※ Context Switching: PCB를 교환하는 과정.
멀티 프로세싱: 멀티 프로세스를 통해 동시에 두 가지 이상의 일을 수행할 수 있는 것. e.g, 웹 브라우저(브라우저 프로세스, 렌더러 프로세스, 플러그인 프로세스, GPU 프로세스)
IPC: 프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 메커니즘. 클라이언트가 데이터를 요청하고 서버가 클라이언트의 요청에 응답하는 것도 IPC.
- 공유 메모리: 프로세스가 서로 통신할 수 있도록 공유 버퍼를 생성하는 것.
- 파일
- 소켓: 동일한 컴퓨터의 다른 프로세스나 네트워크의 다른 컴퓨터로 네트워크 인터페이스를 통해 전송하는 데이터. TCP, UDP 등.
- unnamed pipe(익명 파이프): 프로세스 간에 FIFO 방식으로 일깋는 임시 공간인 파이프를 기반으로 데이터를 주고 받으며, 단방향 방식의 읽기 전용, 쓰기 전용 파이프를 만들어서 작동하는 방식. 부모-자식 프로세스 간에만 사용 가능.
- named pipe(명명된 파이프): 파이프 서버와 하나 이상의 파이프 클라이언트 간의 통신을 위한 명명된 단방향 또는 이중 파이프. 컴퓨터의 프로세스끼리, 또는 다른 네트워크 상의 컴퓨터와도 통신할 수 있음.
- 메시지 큐: 메시지를 큐 데이터 구조 형태로 관리하는 것.
스레드: 프로세스의 실행 가능한 가장 작은 단위. 코드, 데이터, 힙은 스레드끼리 서로 공유.
- 멀티 스레딩: 한 스레드가 중단되어도 다른 스레드는 실행 상태일 수 있어 빠른 처리 가능. 하지만, 한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 프로세스에 영향을 줄 수 있다는 단점이 있음.
공유 자원: 시스템 안에서 각 프로세스, 스레드가 함게 접근할 수 있는 모니터, 프린터, 메모리,파일, 데이터 등의 자원이나 변수 등을 의미. 이 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 race condition 이라고 함.
임계 영역: 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 영역
- 뮤텍스: 공유 자원을 사용하기 전에 설정하고 사용한 후에 해제하는 잠금.
- 세마포어: 일반화 된 뮤텍스. 간단한 정수값과 wait(), signal() 두 개의 함수로 공유 자원에 대한 접근 처리.
- wait(): 자신의 차례가 올 때까지 기다리는 함수
- signal(): 다음 프로세스로 순서를 넘겨주는 함수
교착 상태(deadlock): 두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태.
- 원인: 상호 배제(mutual exclusion), 점유 대기(hold and wait), 비선점(nonpreemptive), 환형 대기(circular wait)
CPU 스케줄링 알고리즘
- 비선점형: FCFS, SJF, 우선순위
- 선점형: 라운드로빈, SRF, 다단계 큐
- FCFS: 가장 먼저 온 것을 가장 먼저 처리하는 알고리즘. 준비 큐에서 오래 기다리는 convoy effect 발생하는 단점.
- SJF: 실행 시간이 가장 짧은 프로세스를 가장 먼저 실행. 긴 시간을 가진 프로세스가 실행되지 않는 starvation이 일어남. 실제로는 실행 시간을 알 수 없기 때문에 과거의 정보를 토대로 추측.
- 우선순위: SJF에서 starvation 현상을 극복하기 위해 시간이 지날수록 우선순위를 높이는 aging을 함.
- 라운드로빈: 동일한 할당 시간을 주고 그 시간 안에 끝나지 않으면 다시 준비 큐에 넣는 알고리즘.
- SRF: SJF에서 중간에 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행하는 알고리즘.
- 다단계 큐: 우선순위에 따른 준비 큐를 여러개 사용하고, 큐마다 라운드로빈이나 FCFS 등 다른 스케줄링 알고리즘을 적용한 것. 큐 간의 프로세스는 이동이 안되므로 스케줄링 부담이 적지만 유연성이 떨어짐.
'면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
면접을 위한 CS 전공지식 노트: 5장 자료구조 (0) | 2022.06.24 |
---|---|
면접을 위한 CS 전공지식 노트: 4장 데이터베이스 (0) | 2022.06.23 |
면접을 위한 CS 전공지식 노트: 2장 네트워크 (0) | 2022.06.22 |
면접을 위한 CS 전공지식 노트: 1장 디자인 패턴과 프로그래밍 패러다임 (0) | 2022.06.21 |