<CS 지식> OS 질의응답

Google 아니고 Joogle·2022년 5월 14일
0

CS 지식

목록 보기
7/22
post-custom-banner

참고

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에 가장 근사
  • 가장 오랫동안 참조되지 않은 페이지를 교체하는 기법으로 오버헤드가 큰 것이 단점이지만 가장 이상적
profile
Born to be happy, Not perfect 🤍
post-custom-banner

0개의 댓글