Skip to content

Latest commit

 

History

History
240 lines (216 loc) · 12.6 KB

02-OPERATING_SYSTEM.md

File metadata and controls

240 lines (216 loc) · 12.6 KB

운영체제

1. 시스템 콜이 무엇인지 설명해 주세요.

  • 우리가 사용하는 시스템 콜의 예시를 들어주세요.
  • 시스템 콜이, 운영체제에서 어떤 과정으로 실행되는지 설명해 주세요.
  • 시스템 콜의 유형에 대해 설명해 주세요.
  • 운영체제의 Dual Mode 에 대해 설명해 주세요.
  • 왜 유저모드와 커널모드를 구분해야 하나요?
  • 서로 다른 시스템 콜을 어떻게 구분할 수 있을까요?

2. 인터럽트가 무엇인지 설명해 주세요.

  • 인터럽트는 어떻게 처리하나요?
  • Polling 방식에 대해 설명해 주세요.
  • HW / SW 인터럽트에 대해 설명해 주세요.
  • 동시에 두 개 이상의 인터럽트가 발생하면, 어떻게 처리해야 하나요?

3. 프로세스가 무엇인가요?

  • 프로그램과 프로세스, 스레드의 차이에 대해 설명해 주세요.
  • PCB가 무엇인가요?
  • 그렇다면, 스레드는 PCB를 갖고 있을까요?
  • 리눅스에서, 프로세스와 스레드는 각각 어떻게 생성될까요?
  • 자식 프로세스가 상태를 알리지 않고 죽거나, 부모 프로세스가 먼저 죽게 되면 어떻게 처리하나요?
  • 리눅스에서, 데몬프로세스에 대해 설명해 주세요.
  • 리눅스는 프로세스가 일종의 트리를 형성하고 있습니다. 이 트리의 루트 노드에 위치하는 프로세스에 대해 설명해 주세요.

4. 프로세스 주소공간에 대해 설명해 주세요.

  • 초기화 하지 않은 변수들은 어디에 저장될까요?
  • 일반적인 주소공간 그림처럼, Stack과 Heap의 크기는 매우 크다고 할 수 있을까요? 그렇지 않다면, 그 크기는 언제 결정될까요?
  • Stack과 Heap 공간에 대해, 접근 속도가 더 빠른 공간은 어디일까요?
  • 다음과 같이 공간을 분할하는 이유가 있을까요?
  • 스레드의 주소공간은 어떻게 구성되어 있을까요?
  • "스택"영역과 "힙"영역은 정말 자료구조의 스택/힙과 연관이 있는 걸까요? 만약 그렇다면, 각 주소공간의 동작과정과 연계해서 설명해 주세요.
  • IPC의 Shared Memory 기법은 프로세스 주소공간의 어디에 들어가나요? 그런 이유가 있을까요?
  • 스택과 힙영역의 크기는 언제 결정되나요? 프로그램 개발자가 아닌, 사용자가 이 공간의 크기를 수정할 수 있나요?

5. 단기, 중기, 장기 스케쥴러에 대해 설명해 주세요.

  • 현대 OS에는 단기, 중기, 장기 스케쥴러를 모두 사용하고 있나요?
  • 프로세스의 스케쥴링 상태에 대해 설명해 주세요.
  • preemptive/non-preemptive 에서 존재할 수 없는 상태가 있을까요?
  • Memory가 부족할 경우, Process는 어떠한 상태로 변화할까요?

6. 컨텍스트 스위칭 시에는 어떤 일들이 일어나나요?

  • 프로세스와 스레드는 컨텍스트 스위칭이 발생했을 때 어떤 차이가 있을까요?
  • 컨텍스트 스위칭이 발생할 때, 기존의 프로세스 정보는 커널스택에 어떠한 형식으로 저장되나요?
  • 컨텍스트 스위칭은 언제 일어날까요?

7. 프로세스 스케줄링 알고리즘에는 어떤 것들이 있나요?

  • RR을 사용할 때, Time Slice에 따른 trade-off를 설명해 주세요.
  • 싱글 스레드 CPU 에서 상시로 돌아가야 하는 프로세스가 있다면, 어떤 스케쥴링 알고리즘을 사용하는 것이 좋을까요? 또 왜 그럴까요?
  • 동시성과 병렬성의 차이에 대해 설명해 주세요.
  • 타 스케쥴러와 비교하여, Multi-level Feedback Queue는 어떤 문제점들을 해결한다고 볼 수 있을까요?
  • FIFO 스케쥴러는 정말 쓸모가 없는 친구일까요? 어떤 시나리오에 사용하면 좋을까요?
  • 우리는 스케줄링 알고리즘을 "프로세스" 스케줄링 알고리즘이라고 부릅니다. 스레드는 다른 방식으로 스케줄링을 하나요?
  • 유저 스레드와 커널 스레드의 스케쥴링 알고리즘은 똑같을까요?

8. 뮤텍스와 세마포어의 차이점은 무엇인가요?

  • 이진 세마포어와 뮤텍스의 차이에 대해 설명해 주세요.
  • Lock을 얻기 위해 대기하는 프로세스들은 Spin Lock 기법을 사용할 수 있습니다. 이 방법의 장단점은 무엇인가요? 단점을 해결할 방법은 없을까요?
  • 뮤텍스와 세마포어 모두 커널이 관리하기 때문에, Lock을 얻고 방출하는 과정에서 시스템 콜을 호출해야 합니다. 이 방법의 장단점이 있을까요? 단점을 해결할 수 있는 방법은 없을까요?

9. Deadlock 에 대해 설명해 주세요.

  • Deadlock 이 동작하기 위한 4가지 조건에 대해 설명해 주세요.
  • 그렇다면 3가지만 충족하면 왜 Deadlock 이 발생하지 않을까요?
  • 어떤 방식으로 예방할 수 있을까요?
  • 왜 현대 OS는 Deadlock을 처리하지 않을까요?
  • Wait Free와 Lock Free를 비교해 주세요.

10. 프로그램이 컴파일 되어, 실행되는 과정을 간략하게 설명해 주세요.

  • 링커와, 로더의 차이에 대해 설명해 주세요.
  • 컴파일 언어와 인터프리터 언어의 차이에 대해 설명해 주세요.
  • JIT에 대해 설명해 주세요.
  • 본인이 사용하는 언어는, 어떤식으로 컴파일 및 실행되는지 설명해 주세요.
  • Python 같은 언어는 CPython, Jython, PyPy등의 다양한 구현체가 있습니다. 각각은 어떤 차이가 있을까요? 또한, 실행되는 과정 또한 다를까요?
  • 우리는 흔히 fork(), exec() 시스템 콜을 사용하여 프로세스를 적재할 수 있다고 배웠습니다. 로더의 역할은 이 시스템 콜과 상관있는 걸까요? 아니면 다른 방식으로 프로세스를 적재할 수 있는 건가요?

11. IPC가 무엇이고, 어떤 종류가 있는지 설명해 주세요.

  • Shared Memory가 무엇이며, 사용할 때 유의해야 할 점에 대해 설명해 주세요.
  • 메시지 큐는 단방향이라고 할 수 있나요?

12. Thread Safe 하다는 것은 어떤 의미인가요?

  • Thread Safe 를 보장하기 위해 어떤 방법을 사용할 수 있나요?
  • Peterson's Algorithm 이 무엇이며, 한계점에 대해 설명해 주세요.
  • Race Condition 이 무엇인가요?
  • Thread Safe를 구현하기 위해 반드시 락을 사용해야 할까요? 그렇지 않다면, 어떤 다른 방법이 있을까요?

13. Thread Pool, Monitor, Fork-Join에 대해 설명해 주세요.

  • Thread Pool을 사용한다고 가정하면, 어떤 기준으로 스레드의 수를 결정할 것인가요?
  • 어떤 데이터를 정렬 하려고 합니다. 어떤 방식의 전략을 사용하는 것이 가장 안전하면서도 좋은 성능을 낼 수 있을까요?

14. 캐시 메모리 및 메모리 계층성에 대해 설명해 주세요.

  • 캐시 메모리는 어디에 위치해 있나요?
  • L1, L2 캐시에 대해 설명해 주세요.
  • 캐시에 올라오는 데이터는 어떻게 관리되나요?
  • 캐시간의 동기화는 어떻게 이루어지나요?
  • 캐시 메모리의 Mapping 방식에 대해 설명해 주세요.
  • 캐시의 지역성에 대해 설명해 주세요.
  • 캐시의 지역성을 기반으로, 이차원 배열을 가로/세로로 탐색했을 때의 성능 차이에 대해 설명해 주세요.
  • 캐시의 공간 지역성은 어떻게 구현될 수 있을까요? (힌트: 캐시는 어떤 단위로 저장되고 관리될까요?)

15.메모리의 연속할당 방식 세 가지를 설명해주세요. (first-fit, best-fit, worst-fit)

  • worst-fit 은 언제 사용할 수 있을까요?
  • 성능이 가장 좋은 알고리즘은 무엇일까요?

16. Thrashing 이란 무엇인가요?

  • Thrashing 발생 시, 어떻게 완화할 수 있을까요?

17. 가상 메모리란 무엇인가요?

  • 가상 메모리가 가능한 이유가 무엇일까요?
  • Page Fault가 발생했을 때, 어떻게 처리하는지 설명해 주세요.
  • 페이지 크기에 대한 Trade-Off를 설명해 주세요.
  • 페이지 크기가 커지면, 페이지 폴트가 더 많이 발생한다고 할 수 있나요?
  • 세그멘테이션 방식을 사용하고 있다면, 가상 메모리를 사용할 수 없을까요?

18. 세그멘테이션과 페이징의 차이점은 무엇인가요?

  • 페이지와 프레임의 차이에 대해 설명해 주세요.
  • 내부 단편화와, 외부 단편화에 대해 설명해 주세요.
  • 페이지에서 실제 주소를 어떻게 가져올 수 있는지 설명해 주세요.
  • 어떤 주소공간이 있을 때, 이 공간이 수정 가능한지 확인할 수 있는 방법이 있나요?
  • 32비트에서, 페이지의 크기가 1kb 이라면 페이지 테이블의 최대 크기는 몇 개일까요?
  • 32비트 운영체제는 램을 최대 4G 까지 사용할 수 있습니다. 이 이유를 페이징과 연관 지어서 설명해 주세요.
  • C/C++ 개발을 하게 되면 Segmentation Fault 라는 에러를 접할 수 있을텐데, 이 에러는 세그멘테이션/페이징과 어떤 관계가 있을까요?

19. TLB는 무엇인가요?

  • TLB를 쓰면 왜 빨라지나요?
  • MMU가 무엇인가요?
  • TLB와 MMU는 어디에 위치해 있나요?
  • 코어가 여러개라면, TLB는 어떻게 동기화 할 수 있을까요?
  • TLB 관점에서, Context Switching 발생 시 어떤 변화가 발생하는지 설명해 주세요.

20. 동기화를 구현하기 위한 하드웨어적인 해결 방법에 대해 설명해 주세요.

  • volatile 키워드는 어떤 의미가 있나요?
  • 싱글코어가 아니라 멀티코어라면, 어떻게 동기화가 이뤄질까요?

21. 페이지 교체 알고리즘에 대해 설명해 주세요.

  • LRU 알고리즘은 어떤 특성을 이용한 알고리즘이라고 할 수 있을까요?
  • LRU 알고리즘을 구현한다면, 어떻게 구현할 수 있을까요?
  • LRU 알고리즘의 단점을 설명해 주세요. 이를 해결할 수 있는 대안에 대해서도 설명해 주세요.

22. File Descriptor와, File System에 에 대해 설명해 주세요.

  • I-Node가 무엇인가요?
  • 프로그래밍 언어 상에서 제공하는 파일 관련 함수 (Python - open(), Java - BufferedReader/Writer 등)은, 파일을 어떤 방식으로 읽어들이나요?

23. 동기와 비동기, 블로킹과 논블로킹의 차이에 대해 설명해 주세요.

  • 그렇다면, 동기이면서 논블로킹이고, 비동기이면서 블로킹인 경우는 의미가 있다고 할 수 있나요?
  • I/O 멀티플렉싱에 대해 설명해 주세요.
  • 논블로킹 I/O를 수행한다고 하면, 그 결과를 어떻게 수신할 수 있나요?