Open
Description
운영체제란 무엇인지 그리고 운영체제의 역할에 대해 말씀해 주세요.
운영체제(OS, Operating System)는 컴퓨터 시스템의 핵심 소프트웨어로, 컴퓨터 하드웨어와 응용 프로그램 간의 상호작용을 관리하고 제어하는 역할
- CPU 스케줄링과 프로세스 관리: CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환 관리
- 메모리 관리: 한정된 메모리를 프로세스에 할당하는 것 관리
- 디스크 파일 관리: 디스크 파일 보관, 관리
- I/O 디바이스 관리: I/O 디바이스 간에 데이터를 주고받는 것 관리
캐시 메모리를 왜 사용하나요?
- 캐시는 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말한다.
- 실제로 메모리와 CPU 사이의 속도 차이가 너무 크기 때문에 그 중간에 레지스터 계층에 둬서 속도 차이를 해결한다.
Critical Section(임계영역)에 대해 설명해주세요.
- 임계 영역이란 프로세스간에 공유자원을 접근하는데 있어 문제가 발생하지 않도록 한번에 하나의 프로세스만 이용하게끔 보장해줘야 하는 영역을 말합니다.
- 상호배제 : 한 프로세스가 임계영역에 들어갔을 때 다른 프로세스는 들어갈 수 없음
- 한정대기 : 특정 프로세스가 영원히 임계영역에 들어가지 못하면 안됨
- 융통성 : 만약 어떠한 프로세스도 임계영역을 사용하지 않는다면 임계영역 외부의 어떠한 프로세스도 들어갈 수 있으며 프로세스끼리 방해하지 않음
세마포어와 뮤텍스의 차이에 대해 설명해보세요.
- 세마포어는 여러개의 프로세스가 접근 가능한 공유자원을 관리하는 방식이고, 뮤텍스가 될 수 있지만, 뮤텍스는 한 번에 한 개의 프로세스만 접근 가능하도록 관리하는 방식입니다. 따라서 뮤텍스는 세마포어가 될 수 없습니다.
- 또, 세마포어는 다른 프로세스가 세마포어를 해제할 수 있지만, 뮤텍스는 락을 획득한 프로세스만 락을 반환할 수 있습니다.
교착 상태의 원인
- 상호 배제 : 한 프로세스가 자원을 독점하고 있으며 다른 프로세스들이 접근 불가능
- 점유 대기 : 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태
- 비선점 : 다른 프로세스의 자원을 강제적으로 가져올 수 없음
- 환형 대기 : 프로세스 a는 프로세스 b의 자원을 요구하고, 프로세스 b는 프로세스 a의 자원을 요구하는 등 서로가 서로의 자원을 요구하는 상황
- 해결방법
- 예방: 4가지 조건 중 하나라도 만족되지 않도록 합니다.
- 회피: 알고리즘을 데드락이 발생하지 않도록 합니다.
- 회복: 교착상태가 발생할 때, 해결합니다.
- 무시: 회복과정의 성능저하가 심하다면 그냥 무시합니다.
컨텍스트 스위칭에 대해 설명해보세요.
- 컨텍스트 스위칭은 한 Task가 끝날 때까지 기다리는 것이 아니라 여러 작업을 번갈아가며 실행해서 동시에 처리될 수 있도록 하는 방법입니다.
- 인터럽트가 발생하면 현재 프로세스의 상태를 PCB에 저장하고 새로운 프로세스의 상태를 레지스터에 저장하는 방식으로 동작합니다. 이 때, CPU는 아무런 일을 하지 않으므로 잦은 컨텍스트 스위칭은 성능저하를 일으킬 수 있습니다.
- 스레드와 프로세스의 동작방식이 약간 상이한데, 스레드는 캐시메모리나 PCB에 저장해야하는 내용이 적고, 비워야 하는 내용도 적기때문에 상대적으로 더 빠른 컨텍스트 스위칭이 일어날 수 있습니다.
스레싱에 대해서 설명해주세요.
- 메모리의 페이지 폴트율이 높은 것을 의미하며, 이는 컴퓨터의 심각한 성능 저하를 일으킨다.
- 스레싱은 메모리에 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생한다.
- 페이지 폴트가 일어나면 CPU 사용률이 줄어들고 운영체제는 착각하여 가용성을 높이기 위해 프로세스를 더 추가한다.
- 이를 해결하기 위해 메모리를 늘리거나, HDD를 사용한다면 SSD로 바꾸는 방법이 있다.
멀티 프로세스 대신 멀티 스레드를 사용하는 이유 (멀티스레드 프로그래밍에 대해 설명해보세요.)
- 멀티스레드 프로그래밍은 하나의 프로세스에서 여러개의 스레드를 만들어 자원의 생성과 관리의 중복을 최소화하는 것을 멀티스레드 프로그래밍이라고 합니다.
- 장점
- 멀티 프로세스에 비해 메모리 자원소모가 줄어듭니다.
- 힙 영역을 통해서 스레드간 통신이 가능해서 프로세스간 통신보다 간단합니다.
- 스레드의 컨텍스트 스위칭은 프로세스의 컨텍스트 스위칭보다 빠릅니다.
- 단점
- 힙 영역에 있는 자원을 사용할 때는 동기화를 해야합니다.
- 동기화를 위해서 락을 과도하게 사용하면 성능이 저하될 수 있습니다.
- 하나의 스레드가 비정상적으로 동작하면 다른 스레드도 종료될 수 있습니다.
Thread-safe 하다는 의미와 설계하는 법을 설명해보세요.
두 개 이상의 스레드가 race condition에 들어가거나 같은 객체에 동시에 접근해도 연산결과의 정합성이 보장될 수 있게끔 메모리 가시성이 확보된 상태를 의미합니다.
- java.util.concurrent 패키지 하위의 클래스를 사용합니다.
- 인스턴스 변수를 두지 않습니다.
- Singleton 패턴을 사용합니다.(이 때, 일반적으로 구현하는 Singleton Pattern은 Thread-safe 하지 않습니다.)
- 동기화(syncronized) 블럭에서 연산을 수행합니다.
PCB에 대해서 설명해주세요.
- 운영체제에서 프로세스에 대한 메타데이터를 저장한 데이터를 말한다.
- 프로세스 제어 블록이라고 불리고 프로세스가 생성되면 운영체제는 해당 PCB를 생성한다.
- 프로세스의 메타데이터들이 PCB에 저장되어 관리되고, 중요한 정보들이기 때문에 일반 사용자가 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리한다.
페이지 교체 알고리즘 종류와 방식 설명
- 오프라인 알고리즘: 먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘 (이상적으로 사용할 수 없는 알고리즘)
- FIFO: 가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법 의미
- LRU(Least Recentle Used): 참조가 가장 오래된 페이지를 바꿈 (오래된 것을 파악하기 위해 각 페이지마다 계수기, 스택을 두어야 하는 문제)
- NUR(Not Used Recently)
- LRU에서 발전한 알고리즘으로 clock 알고리즘이라고 함
- 먼저 0(최근에 참조되지 않음)과 1(최근에 참조)을 가진 비트를 두고, 시계 방향으로 돌면서 0을 찾는 순간 해당 프로세스를 교체하고 1로 바꾸는 알고리즘
- LFU(Least Frequently Used): 가장 참조 횟수가 적은 페이지를 교체