참고
1. Program과 Process의 차이
program
은 작업을 위해 실행할 수 있는 파일
의 단위, process
는 메모리에 적재되어 CPU를 할당받아 현재 실행 중
인 프로그램
2. Process와 Thread의 차이
- thread는
process를 구성
하는 실행 단위
- thread는 code, data, heap영역을 통해 process 자원을 공유할 수 있으며 한 thread에서 오류가 발생 시 process 내의 모든 thread가 종료
3. Process가 도중에 중지되는 경우, 그 원인과 다시 실행할 수 있는 방법
interrup
혹은 system call
등에 의해 process가 중지될 수 있음, PCB안에 해당 process정보가 저장되어 있기 때문에 추후에 실행 가능한 상태가 되면 PCB를 통해
다시 실행
4. Process의 Heap, Stack 영역에 들어있는 정보
Heap
: 동적 할당되는 모든 요소들
Stack
: 매개변수, 로컬변수, 리턴값, 복귀주소 등
5. Stack을 Thread마다 독립적으로 할당하는 이유
- 각 Thread가
독립적인 실행 흐름
을 갖기 위해서는 독립적이 함수 호출이 보장
되어야 하기 때문
6. Thread와 Multi-thread의 차이, Multi-thread의 장단점
Thread
: 할당 받은 자원을 이용한 프로세스의 실행 흐름 단위
Multi-thread
: 한 프로세스 내에 이러한 thread가 여러 개
동작하는 방식
- Multi-thread 장점 : process 를 여러 개 두는 방식에 비해 context switching 비용이 적게 들며 응답 시간이 빠름
- Multi-thread 단점 : 같은 process 내의 자원을 다른 thread과 공유하므로 동기화 문제를 고려해야 함. 또한 process가 종료되면 내부 thread 모두 종료되므로 한 thread가 process를 의도치 않게 종료했을 경우 나머지 thread들도 모두 종료될 수 있음
7. Multi-thread, Multi-process의 차이
Multi-thread
: 적은 메모리
공간 차지, 빠른 context switch, 동기화 문제, 하나의 thread가 종료되면 전체 thread 종료
Muti-Process
: 하나의 process가 죽더라도 다른 process에는 영향을 끼치지 않음
. 메모리 공간 차지, CPU 점유 시간을 많이 차지함
8. Context Switching 이란?
- 현재 CPU를 할당받아 시행중인 Process A와 대기중인 Process B가 있다고 할 때, A Process -> B Process로
CPU사용/제어권이 이전
되는 것
9. Scheduling이 필요한 이유?
- 한정적인 메모리(자원)을 효율적으로 관리하기 위해,
공정성
을 주기 위해 필요
10. Scheduler / CPU Scheduler
- Job Scheduler (=장기):
disk와 memory
간 Scheduling 담당
- CPU Scheduler (=단기):
memory와 CPU
간 Scheduling 담당
11. 중기 스케줄러에서 suspended 상태와 blocked 상태의 다른 점?
blocked
는 다른 I/O 작업을 기다리는 상태이기 때문에 스스로 ready queue
로 돌아갈 수 있음
suspened
는 외부적인 이유로 유예됐기 때문에 스스로 돌아갈 수 없음
12. FCFS Scheduling 을 개선한 방식
FCFS
는 먼저 도착한 Process에게 CPU를 할당하는 기법
- 먼저 도착한 Process가 실행 시간이 길 경우 나중에 도착한 Process의 대기 시간이 길어지는
Convoy Efeect
라는 문제점이 있음
SJF (Shortest Job First)
기법 사용 - 짧은 실행 시간을 갖는 프로세스에게 CPU먼저 할당
- 실행 시간이 긴 프로세스는 계속 CPU 할당 받지 못하는
Starvation 현상
나타날 수 있음
13. Round Robin Scheduling 방식에서 time quantum 설정에 따른 결과
- 긴 경우:
FCFS
과 다를 바 없음
- 짧은 경우:
Context Switching
이 자주 일어나 overhead
발생
14. Overhead?
- 프로그램 실행 흐름 도중 동떨어진 위치의 코드를 실행시켜야 할 때,
추가적으로 시간, 메모리, 자원이 사용
되는 현상
15. Synchronous / Asynchronous
- Synchronous : 작업 완료 여부를
호출한 쪽
에서 확인
- Asynchronous : 작업 완료 여부를
호출받은 쪽
에서 확인
16. Blocking / Non-Blocking
- blocking : 호출 받은 쪽에서 함수값을 바로 return 하지 않고
제어권을 들고
있음
- non-blocking : 호출 받은 쪽에서
바로 return
을 해주어 다른 일을 할 수 있음
17. Race Condition (경쟁상태)
- 두 개 이상의 concurrent한 process 혹은 thread가
공유 자원에 접근
하려고 할 때, 동기화 매커니즘 없이 접근하여 그 순서에 따라 결과가 달라지는 문제
18. Critical Section
- 여러 process가 data를 공유하며 수행할 때, 각 process에서
공유 데이터를 접근하는 프로그램 코드
영역
- 공유 자원을 여러 process가 동시에 접근할 때 잘못된 결과를 만들 수 있기 때문에 한 process가 critical section을 수행할 때,
다른 process가 접근하지 못하도록
해야함
19. Critical Section을 Process들이 같이 쓸 수 있는 조건
상호 배타(Mutual Exclusion)
: 어떤 task가 critical section을 사용 중이면 다른 task는 사용 불가
Progress
: 현재 critical section을 사용 중인 task가 없고, 들어가길 원하는 task가 있다면 바로 들여보냄
한정된 대기 (Bounded Waiting)
: Process가 진입 가능한 횟수에는 제한이 있어서 특정한 process만 계속 진입하는 것을 방지
20. Thread-safe
- Multi-thread 환경에서
여러 thread가 동시에 공유 자원에 접근
할 때, 의도한대로 동작하는 것
- 공유 자원에 접근하는 임계 영역을
Mutex, Semaphore
등의 동기화 기법으로 제어해주어야 함
21. Reentrant
- Reentrant 함수는 여러 thread가
동시에 접근해도 언제나 같은 실행 결과
를 반환
- 함수 내에서는 공유 자원을 사용하지 않고, 호출 시 제공된 매개변수 만으로 동작
- Reentrant -> Thread-safe 하지만 역은 성립히지 않음
22. Mutex Lock / Semaphore
- Mutex lock은
동기화 대상이 하나
, Semaphore는 하나 이상
- Semaphore는 Mutex Lock이 될 수 있지만 역은 성립하지 않음
- Semaphore는 Process 범위 내에서 소유 불가능, Mutex는 소유 가능
- Mutex Lock은 Lock을 가지고 있는 thread가 해제 가능, Semaphore는 외부에서도 해제 가능
- Semaphore는 시스템 범위에 걸쳐져 있고 파일 형태로 존재, Mutext Lock은 Process범위 내에 있어서 종료시 자동으로 clean up
23. Memory 구조의 순서 - CPU에서 가까운 순
- register → cache memory → main memory → 보조기억장치 → 외부기억장치
- CPU로 멀어질수록 사이즈는 커지고 가격은 저렴해지며 접근 속도는 느려짐
24. 메모리 관리
- 시스템이 실행될 때, 여러 process가 실행이 되는데 각 process가 실행되기 위해서 memory를 필요로 함.
실행되어야 하는 모든 process
가 필요한 시기에 적절하게 memory의 할당
을 받을 수 있도록 memory 관리 필요
25. RAM
- RAM을 늘린다는 것은
main memory의 공간을 늘린다
는 것. 그만큼 한 번에 메모리에 적재시킨 후 처리할 수 있는 process의 양이 많아지고 컴퓨터 속도가 빨라짐
- 메모리가 늘어나는 만큼 많은 메모리를 감당할 수 있는 H/W 필요
26. 외부 단편화 / 내부 단편화
외부 단편화
: 전체 메모리 공간은 충분한 공간을 가지지만 그것들이 연속적이지 않고 작은 공간들로 분산되어 있는 상태
내부 단편화
: 프로세스에 할당된 메모리의 크기가 실제로 사용할 영역보다 커서 남은 공간이 생긴 상태
- 외부 단편화를 해결하기 위해 메모리를 한 군데로 몰아넣어 비어있는 hole을 제거하는
압축 기술
사용 -> 시간이 오래 걸리고 성능이 저하됨 -> paging 기법
사용
27. 가상 메모리 사용
- process에 존재하는 메모리가 무한하지 않기 때문에 가상 메모리를 사용해야 함
메모리가 부족하여 일어나는 예기치 않은 오류
들을 가상메모리를 사용함으로써 일어나지 않고 정상적으로 프로세스가 진행할 수 있도록 도와줌
- 고정된 영역인 page로 분할하는 paging 기법, 논리적인 단위 segment로 분할하는 segentation 기법이 있음
28. Page Fault
- memory에 적재된 page중 사용하려는 page가 없는 현상
- 보조기억장치에서 해당하는 process를 불러오거나 교체 진행
29. Belady's Anomaly
- 페이지를 할당하려고 하는데 frame이 매우 커서 편하게 page가 할당될 수 있는 상황에서도 페이지의 부재가 많이 일어나는 경우가 있음
30. Optimal Page Replacement
- 모든 process의 메모리 참조 계획을 미리 파악할 수 있다면 가능
- 실생활에서 쓰이려면 매일 같은 행동을 반복하는 bot에게 적용
31. LRU (Least Recently Used Algorithm)
- ORP은 이론상에서만 가능하고 현실에서 사용할 수 없음
- LRU는 OPR에 가장 근사
- 가장 오랫동안 참조되지 않은 페이지를 교체하는 기법으로
오버헤드가 큰
것이 단점이지만 가장 이상적