개발 지식 공유, 복습

모각코 Part 4 본문

모각코

모각코 Part 4

like_sonny 2022. 11. 13. 18:58

현재까지 본 면접의 회고와 앞으로 보게 될 면접 준비 겸 공부를 위해 이번에는 CS 부분을 기록해보았습니다.

이번 주는 운영체제를 주제로 공부했습니다.

 

운영체제

  • 운영체제의 역할

1. CPU 스케줄링과 프로세스 관리: CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리

2. 메모리 관리: 한정된 메모리를 어떤 프로세스에 얼마큼 할당해야 하는지 관리

3. 디스크 파일 관리: 디스크 파일을 어떠한 방법으로 보관할지 관리

4. I/O 디바이스 관리: I/O 디바이스들인 마우스, 키보드와 컴퓨터 간에 데이터를 주고받는 것을 관리

 

  • 인터럽트

어떤 신호가 들어왔을 때 CPU를 잠깐 정지시키는 것. 키보드, 마우승 등 IO 디바이스로 인한 인터럽트, 0을 숫자로 나누는 산술 연산에서의 인터럽트, 프로세스 오류 등으로 발생.

인터럽트 간에는 우선순위가 있고 우선순위에 따라 실행되며 하드웨어 인터럽트, 소프트웨어 인터럽트로 나눠짐.

 - 하드웨어 인터럽트: 키보드, 마우스 등 연결하는 일 등의 IO 디바이스에서 발생하는 인터럽트

 - 소프트웨어 인터럽트: 트랩 (trap)이라고도 하며, 프로세스 오류 등으로 프로세스가 시스템 콜을 호출할 때 발동

    (시스템콜이란, 운영체제가 커널에 접근하기 위한 인터페이스로, 유저 프로그램이 운영체제의 서비스를 받기 위해 커널      함수를 호출할 때 사용)

 

  • 메모리

메모리 계층은 레지스터, 캐시, 메모리, 저장장치로 구성

- 레지스터: CPU 안에 있는 작은 메모리로, 휘발성, 속도 가장 빠름, 기억 용량이 가장 적음

- 캐시: L1, L2 캐시를 지칭, 휘발성, 속도 빠름, 기억 용량 적음

- 주기억장치: RAM을 지칭, 휘발성, 속도 보통, 기억 용량 보통

- 보조기억장치: HDD, SDD를 지칭, 휘발성, 속도 낮음, 기억 용량 많음

* 캐시는 데이터를 미리 복사해 놓은 임시 저장소로, 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이긴 위한 메모리. 실제로 메모리와 CPU 사이의 속도 차이가 너무 커 그 중간에서 레지스터 계층을 둬서 속도 차이를 해결

(웹 브라우저의 캐시로 쿠키, 로컬 스토리지, 세션 스토리지가 있다.)

 

- 메모리 할당

    - 고정 분할 방식: 미리 나누어 관리하는 방식, 융통성 X, 내부 단편화 발생 (내부 단편화란, 메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 현상)

    - 가변 분할 방식: 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나누어 사용, 외부 단편화 발생, 최초적합, 최적적       합, 최악 적합이 있다. (외부 단편화란, 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하         는 현상)

    - 불연속 할당: 현재 운영체제가 쓰는 방법으로, 페이징, 세그멘테이션, 페이지드 세그멘테이션 기법 존재.

        - 페이징: 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스 할당. 홀의 크기가 균일하지 안               은 문제가 없어지지만 주소 변환이 복잡

        - 세그멘테이션: 프로세스는 코드, 데이터, 스텍, 힙 등으로 이루어지는데, 코드와 데이터 등 이를 기반으로 나눌 수 있             으며 함수 단위로 나눌 수도 있다. 공유와 보안 측면에서 우수하지만, 홀 크기가 균일하지 않음

        - 페이지드 세그멘테이션: 공유나 보안을 의미 단위에 세그먼트로 나누고 물리적 메모리는 페이지로 나누는 것.

 

- 페이지 교체 알고리즘

    - FIFO (First In First Out): 선입선출로, 가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법

    - LRU (Least Recentle Used): 참조가 가장 오래된 페이지를 교체

    - NUR (Not Used Recently): 일명 Clock 알고리즘으로, 시계 방향으로 돌며 0을 찾는 순간, 해당 프로세스 교체하고 1           로 바꾸는 알고리즘

    - LFU (Least Frequently Used): 가장 참조 횟수가 적은 페이지를 교체, 가장 적게 사용한 것을 교체

 

  • 프로세스

프로세스는 컴퓨터에서 실행되고 있는 프로그램을 말하며, CPU 스케줄링의 대상이 되는 작업이라는 용어와 같다.

- 프로세스의 상태

    - 생성 상태 (New): fork(), exec()를 통해 생성, 이때 PCB가 할당

    - 대기 상태 (Ready): 메모리 공간이 충분하면 메모리를 할당받고 아니면 대기하고 있으며 CPU 스케줄러로부터 CPU 소유권이 넘어오는 것을 기다리는 상태

    - 실행 상태 (Running): CPU 소유권과 메모리를 할당받고 수행 중인 상태를 의미

    - 중단 상태 (Blocked, Waiting): 어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태로, I/O 디바이스에 의한          인터럽트로  주로 발생.

    - 종료 상태 (Terminated): 메모리와 CPU 소유권을 모두 놓고 가는 상태로, 자연스럽게 종료되거나 부모 프로세스가 자          식 프로세스를 강제시키닌 종료로 구분.

프로세스 상태

- 프로세스의 메모리 구조

위에서부터 스택, 힙, 데ㅔ이터 영역, 코드 영역을 구분, 스택은 위 주소부터 할당되고 힙은 아래 주소부터 할당

    - 스택: 지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정되며 동적인 특징을 가짐, 함수가 재귀적으로 호          출되면 동적으로 크기가 늘어나는데 이때 힙과 스택의 메모리 영역이 겹치면 안되므로 힙과 스택 사이의 공간을 비움

    - : 동적 할당할 때 사용되며 런타임 시 크기가 결정, 벡터와 같이 동적인 배열이 사용됨

    - 데이터 영역: 전역변수, 정적 변수가 저장, 정적인 특징을 가져 프로그램이 종료되면 사라지는 변수가 들어있는 영역.          데이터 영역은 BSS 영역과 Data 영역으로 나뉘는데, BSS는 초기화되지 않은 변수가 0으로 초기화되어 저장되고                Data 영역은 0이 아닌 다른 값으로 할당된 변수들이 저장됨.

    - 코드 영역: 프로그램에 내장되어 있는 소스 코드가 들어가는 영역으로, 수정이 불가능한 기계어로 저장되어 있으며 정        적인 특징.

프로세스 메모리 구조

- 스레드

스레드는 프로세스의 실행 가능한 가장 작은 단위로, 프로세스는 여러 스레드를 가질 수 있다.

    - 멀티 스레딩: 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법으로, 스레드끼리 자원을 공유하므로        효율성이 높다. 하지만 한 스레드가 문제가 생기면 다른 스레드에 영향을 끼쳐 스레드로 이루어진 프로세스에 영향을          줄 수 있다.

 

- 공유 자원

공유 자원은 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 파일, 데이터 등의 자원이나 변수 등을 의미, 하나의 공유 자원을 2개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁 상태 (race condition)이라고 하는데 동시에 접근할 때 순서나 타이밍 등으로 인해 결과값에 영향을 줄 수 있다.

 

- 임계 영역

임계 영역은 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 영역으로, 이를 해결하기 위한 방법은 뮤텍스, 세마포어, 모니터 3가지가 있다. 모두  잠금(Lock) 메커니즘을 토대로 한다.

    - 뮤텍스 (Mutex): 공유자원을 사용하기 전에 설정하고 사용한 후에 해제하는 잠금으로, 잠금이 설정되면 다른 스레드는        잠긴 코드 영역에 접근 불가, 상태는 잠금 또는 잠금 해제만 가짐

    - 세마포어 (Semaphore): 일반화된 뮤텍스로, 간단한 정수 값과 두가지 함수 (wait -> 자신 차례가 올 때까지 대기하는          함수, signal -> 다음 프로세스로 순서를 넘기는 함수)로 공유 자원에 대한 접근 처리 

    - 모니터: 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유 자원을 숨기고 해당 접근에 대해        인터페이스만 제공, 모니터는 세마포어보다 구현하기 쉽고 상호 배제가 자동인 반면, 세마포어에서는 상호 배제를 명          시적으로 구현해야 하는 차이가 있다.

 

 

- 교착 상태 (DeadLock)

교착상태는 2개 이상의 프로세스들이 서로 가진 자원을 기다리며 중단된 상태.

    - 교착상타의 원인

        - 상호배제: 한 프로세스가 자원을 독점하고 있으며 다른 프로세스들은 접근 불가능

        - 점유 대기: 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태

        - 비선점: 다른 프로세스의 자원을 강제적으로 가져올 수 없는 상태

        - 환형 대기: 프로세스 A는 프로세스 B의 자원을 요구하고, 프로세스 B는 프로세스 A의 자원을 요구하며 서로가 서로            의 자원을 요구하는 상황

 

- CPU 스케줄링 알고리즘

    - 비선점형 방식: 프로세스가 스스로 CPU 소유권을 포기하는 방식으로, 컨텍스트 스위칭으로 인한 부하가 적음

        - FCFS (First Come, First Served): 가장 먼저 온 것을 가장 먼저 처리, 길게 수행되는 프로세스로 인해 준비 큐에서            오래 기다리는 현상이 발생

        - SJF (Shortest Job First): 실행 시간이 가장 짧은 프로세스를 가장 먼저 실행, 긴 시간을 가진 프로세스가 실행되지            않는 기아 상태 발생

        - 우선순위: 오래된 작업일수록 우선순위를 높이는 방법을 추가함으로써 SJF의 기아 상태 예방

 

    - 선점형 방식: 현대 운영체제가 사용하는 방식으로, 강제로 프로세스를 중단하고 다른 프로세스에 CPU를 할당

        - 라운드 로빈 (RR): 현대 컴퓨터가 쓰는 스케줄링인 우선순위 스케줄링의 일종으로 각 프로세스는 동일한 할당 시간            을 주고 끝나지 않을 경우 다시 준비 큐의 뒤로 이동

        - SRF: SJF와 다르게 중간에 더 짧은 작업이 들어오면 수행하던 프로세스를 중단하고 해당 프로세스를 수행

        - 다단계 큐: 우선순위에 따른 준비 큐를 여러 개 사용하고, 큐마다 RR이나 FCFS 등 다른 스케줄링 알고리즘을 적용,            큐 간 프로세스 이동이 안되므로 스케줄링 부담은 적지만 유연성은 떨어짐

'모각코' 카테고리의 다른 글

모각코 Part 6  (0) 2022.11.30
모각코 Part 5  (0) 2022.11.29
모각코 Part 3  (0) 2022.11.10
모각코 Part 2  (0) 2022.10.19
모각코 Part 1  (1) 2022.10.03