💡 프로그램과 프로세스의 차이에 대해 설명해주세요.
프로그램의 의미는 어떤 작업을 하기 위해 해야할 일들을 순서대로 나열한 것으로
컴퓨터에서 어떤 작업을 위해 실행할 수 있는 '정적인 상태'의 파일이라고 볼 수 있다.
프로세스는 프로그램이 실행되서 돌아가고 있는 상태, 컴퓨터에서 연속적으로 실행되고 있는 '동적인 상태'의 컴퓨터 프로그램이다.
프로그램이 운영체제로부터 실행에 필요한 자원을 할당받아 프로세스가 되는 것 입니다.
💡 프로세스와 쓰레드의 정의에 대해 설명해주세요.
▪ 프로세스: 운영체제로부터 자원을 할당받은 작업의 단위.
▪ 스레드: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.
💡 프로세스와 쓰레드의 차이에 대해 설명해주세요.
프로세스는 실행 중인 프로그램을 말하며, 완벽히 독립적이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유하지 않습니다. 프로세스는 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있습니다.
쓰레드는 프로세스 내에서 Stack만 따로 할당 받고, 그 이외의 메모리 영역(Code, Data, Heap)영역을 공유하기 때문에 다른 쓰레드의 실행 결과를 즉시 확인할 수 있습니다. 쓰레드는 프로세스 내에 존재하며 프로세스가 할당받은 자원을 이용하여 실행됩니다.
💡 메모리 영역에 대해 설명해주세요.
메모리 영역은 유저 영역과 커널 영역 두가지의 영역으로 나뉘어집니다.
이 중에 유저 영역은 4가지로 구분됩니다.
- 코드 영역
- 프로그램의 코드가 올라가는 영역입니다.
- 코드는 컴파일 된 기계어 코드를 뜻합니다.
- 데이터 영역
- 전역 변수와 정적 변수들이 할당 되는 영역입니다.
- 데이터 영역을 두 가지로 세분화 할 수 있습니다
- 데이터 영역
- 초기화 된 데이터 저장
- bss 영역
- 초기화 되지 않은 데이터 저장
- 데이터 영역
- 힙 영역
- 동적으로 메모리를 할당하여 사용하는 공간
- 스택 영역
- 지역 변수와 매개 변수가 저장되는 영역
- 메모리의 가장 바닥부터 채워지는 구조
💡 멀티 프로세스와 멀티 쓰레드의 특징에 대해 설명해주세요.
멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에 영향을 끼치지 않고 계속 실행된다는 장점이 있지만
멀티 쓰레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 있습니다.
멀티 쓰레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만
하나의 쓰레드에 문제가 생기면 전체 쓰레드가 영향을 받으며 동기화 문제도 있다는 단점이 있습니다.
💡 문맥 전환(Context Switching)에 대해 설명해주세요.
문맥 전환이란 하나의 프로세스(process) 가 CPU 를 사용하다가 다른 프로세스가 사용할수 있도록 이젠 프로세스의 상태(문맥 : context) 를 PCB(Process Control Block)에 저장하고 새로운 프로세스의 상태를 CPU 에 적재하는 것을 의미합니다.
💡 PCB(Process Control Block)에 대해 설명해주세요.
프로세스 제어 블록(이하 PCB)은 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조이다. 쉽게 말하면 운영체제가 프로세스를 제어하기 위해 프로세스의 상태 정보를 저장해 놓는 구조체이다.
PCB는 다음과 같은 항목들을 저장하고 있다.
- Process Id : 프로세스의 고유 번호
- Process State : ready, wait, running 등의 실행 상태
- Program Counter(PC) : 프로그램 카운터, 다음 실행될 명령의 포인터
- CPU registers : CPU 레지스터
- CPU scheduling information : CPU 스케줄링 정보
- Memory-management information : 할당된 자원 정보
- Accounting information : CPU 사용시간 등
- I/O status information : 입출력 상태 정보
💡 멀티 쓰레드의 동시성과 병렬성을 설명해주세요.
동시성은 멀티 작업을 위해 싱글 코어에서 여러 개의 쓰레드가 번갈아 실행하는 것을 말합니다.
(동시에 실행하는 것처럼 보이지만 사실은 번갈아가며 실행하고 있는 것임)
병렬성은 멀티 작업을 위해 멀티 코어에서 한 개 이상의 쓰레드를 포함하는 각 코어들을 동시에 실행하는 것을 말합니다.
💡 멀티 쓰레드 환경에서의 주의사항을 설명해주세요.
다수의 쓰레드가 공유 데이터에 동시에 접근하는 경우에 상호배제 또는 동기화 기법을 통해 동시성 문제 또는 교착 상태가 발생하지 않도록 주의해야 합니다.
💡 데드락에 대해 설명해주세요.
둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 상황을 말합니다.
예를 들어, 자원 A를 가진 프로세스 P1과 자원 B를 가진 프로세스 P2가 있을 때, P1은 B를 필요로 하고 P2는 A를 필요로 한다면 두 프로세스는 서로 자원을 얻기 위해 무한정 기다리게 됩니다.
- 데드락의 4가지 조건
- 비선점 (Nonpreemptive) : 다른 프로세스의 자원을 뺏을 수 없음.
- 순환 대기 (Circular wait) : 두 개 이상의 프로세스가 자원 접근을 기다릴 때, 관계가 순환적 구조.
- 점유 대기 (Hold & Wait) : 공유 자원에 대한 접근 권한을 가진 채로 다른 자원에 대한 접근 권한을 요구.
- 상호 배제(Mutual Exclusion) : 한 번에 한 프로세스만 공유 자원에 접근 가능하며, 접근 권한이 제한적일 경우.
💡 콘보이 현상(convoy effect)이란 무엇이고, 콘보이 현상이 발생될 수 있는 CPU 스케줄러 알고리즘은 무엇인지 설명해주세요.
콘보이 현상이란 작업 시간이 긴 프로세스가 먼저 큐에 도착해서 다른 프로세스의 실행 시간이 전부 늦춰져 효율성을 떨어뜨리는 현상을 말합니다.
FCFS(First-Come First Served) 스케줄링은 비선점형으로, 순차적으로 먼저 큐에 들어온 작업부터 실행하므로 콘보이 현상이 발생할 수 있습니다.
💡 선점형 스케줄링과 비선점형 스케줄링의 차이를 설명해주세요.
선점형은 하나의 프로세스가 다른 프로세스 대신에 CPU를 차지할 수 있음을 말하고,
비선점형은 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없음을 말합니다.
💡 동기와 비동기의 차이에 대해 설명해주세요.
동기는 순차적, 직렬적으로 테스크를 수행하고, 비동기는 병렬적으로 테스크를 수행합니다.
예를 들어, 서버에서 데이터를 가져와서 화면에 표시하는 작업을 수행할 때,
동기는 서버에 데이터를 요청하고 데이터가 응답될 때까지 이후 테스크들은 블로킹(Blocking, 작업 중단)됩니다.
비동기는 서버에 데이터를 요청한 이후 서버로부터 데이터가 응답될 때까지 대기하지 않고(Non-Blocking) 즉시 다음 테스크를 계속해 수행합니다.
💡 Critical Section(임계영역)에 대해 설명해주세요.
임계 영역이란 프로세스간에 공유자원을 접근하는데 있어 문제가 발생하지 않도록 한번에 하나의 프로세스만 이용하게끔 보장해줘야 하는 영역을 말합니다.
임계 영역 문제를 해결하기 위해서는 아래의 3가지 조건을 충족해야 합니다.
- 상호 배제(Mutual exclution) - 하나의 프로세스가 임계 영역에 들어가 있다면 다른 프로세스는 들어갈 수 없어야 한다.
- 진행(Progress) - 임계 영역에 들어간 프로세스가 없는 상태에서 들어가려 하는 프로세스가 여러 개라면 어느 것이 들어갈지 결정 해주어야 한다
- 한정 대기(Bounded waiting) - 다른 프로세스의 기아를 방지하기 위해, 한 번 임계 구역에 들어간 프로세스는 다음 번 임계 영역에 들어갈 때 제한을 두어야 한다.
💡 뮤텍스(Mutex)와 세마포어(Semaphore)의 차이에 대해 설명해주세요.
뮤텍스는 Lock을 사용해 하나의 프로세스나 쓰레드를 단독으로 실행하게 합니다.
반면에 세마포어는 공유자원에 세마포어 변수만큼의 프로세스(또는 쓰레드)가 접근할 수 있습니다.
세마포어의 변수 → 공유자원의 개수를 나타내는 변수
현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있습니다.
하지만 뮤텍스는 락(lock)을 획득한 프로세스가 반드시 그 락을 해제해야 합니다.
0과 1의 값만 갖는 세마포어 → 이진 세마포어(binary semaphore) (= 뮤텍스)
도메인 제한이 없는 세마포어(0,1 뿐만아니라 2,3,4 등의 값들 또한 가질 수 있는) → 카운팅 세마포어(counting semaphore)
💡 페이지 교체 알고리즘에 대해 설명해주세요.
페이징 기법으로 메모리를 관리하는 운영체제에서 필요한 페이지가 주기억장치에 적재되지 않았을 시(페이징 부재시) 어떤 페이지 프레임을 선택해 교체할 것인지 결정하는 방법을 페이지 교체 알고리즘이라고 합니다.
- FIFO(first in first out)
- 가장 간단한 알고리즘으로, 메모리에 올라온 지 가장 오래된 페이지를 교체합니다. 간단하고, 초기화 코드에 대해 적절한 방법이며, 페이지가 올라온 순서를 큐에 저장합니다.
- Belady`s Anomaly 현상이 발생할 수 있습니다.
- OPT(최적(Optimal) 페이지 교체)
- 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체하는 알고리즘입니다. 최적 페이지 교체는 선행 조건이 있는데, 프로세스가 앞으로 사용할 페이지를 미리 알아야 한다는 것입니다. 이 조건은 실제 활용에선 알 방법이 없기 때문에 최적 알고리즘은 구현이 불가능한 알고리즘입니다. 때문에 연구를 목적으로 주로 사용됩니다.
- 모든 페이지 교체 알고리즘 중 page-fault 발생이 가장 적습니다.
- LRU(least-recently-used)
- 가장 오래 사용되지 않은 페이지를 교체하는 알고리즘입니다. OPT 알고리즘의 방식과 비슷한 효과를 낼 수 있는 방법이며, OPT 알고리즘보다 페이지 교체 횟수가 높지만 FIFO 알고리즘 보다 효율적입니다.
- LFU(least-frequently-used)
- 참조 횟수가 가장 작은 페이지를 교체하는 알고리즘입니다. 만약 대상인 페이지가 여러 개 일 경우, LRU 알고리즘을 따라 가장 오래 사용되지 않은 페이지로 교체합니다.
- MFU(most-frequently-used)
- LFU 알고리즘과 반대로, 참조 횟수가 가장 많은 페이지를 교체하는 알고리즘입니다.
💡 Belady's Anomaly 현상에 대해 설명해주세요.
프레임 수가 증가하면(= 메모리 용량이 증가하면) page fault 수가 줄어드는 것이 정상적이다.
하지만 FIFO를 사용했을 때, 그래프를 그려보면 다음과 같은 결과가 나온다.
이와 같이 특정한 페이지 참조열에 대해서는 프레임 수가 증가해도 page fault 수가 오히려 증가하는 이상 현상이 발생한다. 이를 Belady’s Anomaly라 합니다.
💡 Page fault에 대해 설명해주세요.
Page fault를 알기 위해서는 페이징이 무엇인지를 알아야 합니다.
페이징 방법은 가상 메모리를 페이지(Page)라는 고정 크기 형태로 블럭화하여 운용하는 것입니다.
페이지의 총 크기는 곧 가상 메모리 공간의 크기가 되는데, 만약 이 크기가 물리 메모리 공간보다 클 경우 그 여분은 보조기억장치(하드디스크 등)에 저장됩니다.
이 때 물리 메모리와 보조기억장치 간 페이지를 정책에 따라 교환하는 것을 페이징이라 한다.
그렇다면 만약 물리 메모리에 CPU가 요청한 페이지가 없다면 발생하는 것이 페이지 폴트입니다.
💡 페이징 기법에 대해 설명해주세요.
선행 페이징(Anticipatory Paging, Pre-paging)
- 선행 페이징 기법은 프로세스의 모든 데이터를 미리 물리 메모리에 올려놓고 처리하는 것을 의미합니다.
- 사실상, 이 기법은 현실성이 많이 떨어지는 페이지 처리 방법입니다.
요구 페이징(Demand Paging, Demanded Paging)
- 요구 페이징 기법은 프로세스의 모든 데이터를 물리 메모리에 적재하지 않고, 필요한 시점에만 메모리에 적재합니다.
- 필요하지 않은 페이지 프레임은 다시 저장매체에 저장합니다(물리 메모리에서 내린다).
💡 Page fault의 종류에 대해 설명해주세요.
Major Page Fault
Major 페이지 폴트는 일반적으로 스와핑으로 알려진 동작을 의미합니다.
요청한 페이지가 물리 메모리로부터 스왑아웃(Swap-Out)되어 보조기억장치의 가상 메모리에 저장되어있다면 해당 페이지를 다시 물리 메모리로 스왑인(Swap-In)하여야 할 것 입니다.
이것을 Major 페이지 폴트라 합니다.
Major 페이지 폴트는 Disk I/O를 발생시킵니다.
Minor Page Fault
요청한 페이지가 물리 메모리에는 로드되었지만 메모리 관리 유닛(Memory Management Unit, MMU)에는 로드되어있지 않다고 표시된 경우 이를 Minor 페이지 폴트라 합니다.
어느 프로세스의 한 쓰레드가 어떤 페이지를 사용하고 있을 때 해당 프로세스의 다른 쓰레드가 그 페이지를 요청하는 경우를 예시로 들 수 있습니다.
이 경우, MMU는 해당 쓰레드에서 요청한 페이지가 이미 사용되고 있는 페이지를 가리키도록 하면 되기 때문에 스왑인이 발생하지 않습니다. (다시말해 Disk I/O가 생기지 않는다)
Invalid Page Fault
흔한 블루 스크린 원인입니다.
요청한 페이지가 스왑영역의 밖을 참조하거나, 페이지를 쓰기 불가능한 영역에 쓰려고할 때 발생하는 페이지 폴트입니다.
이 경우에는 페이지 폴트 핸들러가 세그멘테이션 폴트(Segmentation Fault)를 발생시킵니다.
결과는 보통 커널 패닉(블루 스크린)으로 나타납니다.
'CS 지식 > 운영체제' 카테고리의 다른 글
[운영체제] 데드락(DeadLock)이란? (0) | 2023.03.23 |
---|---|
[운영체제] 동기 / 비동기 (0) | 2023.03.13 |
[운영체제] 스케줄링 관련 면접 대비 질문 정리 (0) | 2023.02.20 |
[운영체제] 스케줄링 기법 정리 (0) | 2023.02.19 |
[운영체제] 프로세스와 스레드 정리 (0) | 2023.02.15 |