면접을 위한 CS 전공지식 노트

면접을 위한 CS 전공지식 노트: 3장 운영체제

Hyun-danpung2 2022. 6. 22. 13:33
728x90
반응형

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 등 다른 스케줄링 알고리즘을 적용한 것. 큐 간의 프로세스는 이동이 안되므로 스케줄링 부담이 적지만 유연성이 떨어짐.

728x90
반응형