- 운영체제 면접 질문에 답변하기 위해 공부한 내용들을 기록합니다.
- 여러가지 개념에 대해 면접식 흐름으로 서술했습니다. 붉은색 글씨의 내용은 핵심 답변이고 밑의 내용은 꼬리 질문에 대한 답변입니다. 모의면접을 진행하면서 부족한 점들은 보충할 예정입니다.
- 질문 출처는 jscode이며 답변 출처는 하단에 정리해놓았습니다.
공부한 내용들
운영체제는 무엇이고 어떤 역할을 수행하는지 설명해주세요.
운영체제란?
: 컴퓨터 사용자와 컴퓨터 하드웨어 사이의 중개자(intermediary) 역할을 하는 시스템 소프트웨어
(시스템 소프트웨어 : 응용 프로그램과 하드웨어 장치 사이에 존재하는 소프트웨어를 통칭하는 용어로, 운영체제와 컴파일러 등이 있음.)
운영체제의 구성요소 : 커널(운영체제의 핵심 코드), UI 및 도구 프로그램(쉘, 탐색기, 작업 관리자, 제어판 등), 디바이스 드라이버(프린터 드라이버 등)
운영체제의 역할은?
- 편리성 : UI 등 사용자가 프로그램을 편리하고 효율적으로 수행할 수 있는 환경을 제공
- 모든 컴퓨터 자원(하드웨어, 소프트웨어)을 독점적으로 관리한다. 또한 사용자, 성능, 보안을 관리한다.
- 자원 관리의 효율성 : 컴퓨터 자원의 낭비를 줄이고 CPU를 비롯하여 놀고 있는 자원이 없도록 효율적으로 관리 (e.g. 다중 프로그래밍, 시분할 프로그래밍)
- CPU, 프로세스 관리 : 저장 장치에 있는 프로그램을 메모리에 적재한 것, 즉 프로세스를 관리한다. 프로세스 실행, 프로세스 생성, CPU 스케줄링, 프로세스 종료 등 프로세스를 관리하는 기능을 수행한다.
- 메모리 관리 : 각 프로세스에게 적절한 메모리를 할당하고 반환하며, 프로세스에게 할당된 메모리를 다른 프로세스로부터 보호한다.
- 파일 시스템 관리 : 파일 읽기, 쓰기, 삭제. 파일이 실제로 기록된 위치를 아는 것은 오직 운영체제
- 장치 관리 : 입출력 장치들(키보드, 마우스, 디스플레이 등)과 저장 장치를 제어
- 네트워크 관리
- 보안 관리
- 기타 관리 : 사용자 계정 관리, 통계 수집 및 관리, 오류 발견 및 대응, 부팅 기능 수행
커널에 대해 설명해주세요.
커널이란?
: 운영체제의 핵심 부분.(Kernal, 알맹이)
컴퓨터 자원들을 관리하는 역할을 하며 시스템 콜 인터페이스를 제공한다.
- 태스크(프로세스) 관리자 : 물리적 자원인 CPU를 추상 자원인 태스크로 제공
- 메모리 관리자 : 물리적 자원인 메모리를 추상 자원인 페이지나 세그먼트로 제공
- 파일 시스템 관리자 : 물리적 자원인 디스크를 추상 자원인 파일로 제공
- 네트워크 관리자 : 물리적 자원인 네트워크 장치를 추상 자원인 소켓으로 제공
- 디바이스 드라이버 관리자 : 각종 외부 장치(프린터, GPU 등)에 대한 접근을 제공
시스템 콜에 대해 설명해주세요.
: 응용 프로그램에서 커널 공간에 접근하여 특권 명령(커널 코드)을 수행할 수 있도록 하기 위해 커널에서 제공하는 인터페이스.
커널 콜이라고도 부른다.
커널은 항상 컴퓨터 자원들만 바라보고 있기 때문에 사용자와의 직접적인 상호작용은 지원하지 않는다.
그래서 커널은 시스템 콜 인터페이스를 응용 프로그램에게 제공하여 커널에 간접적으로 접근할 수 있게 해준다.
응용 프로그램이 디스크 파일을 접근하거나 화면에 결과를 출력하는 등의 특권 명령(Privileged Instructions)을 수행해야 하는 경우, 커널에게 특권 명령의 대행을 요청하게 된다.
특권 명령에는 I/O 명령, Halt명령, 인터럽트 플래그 설정, 타이머 설정, 컨텍스트 스위칭 등이 있다.
커널은 여러 함수들로 구성되어 있다. (open, read, write, ... 300개 정도)
그리고 응용프로그램으로부터 시스템 콜이 오게 되면 커널 내의 시스템 콜 핸들러가 알맞은 함수를 호출하게 된다.
커널 모드와 유저 모드에 대해 설명해주세요.
모드를 나누는 이유?
: 응용 프로그램이 무분별하게 시스템 자원에 접근할 수 없도록 하기 위해서.
= 커널 코드와 데이터에 대한 보호를 위해서.
커널 모드란?
: 커널 코드가 실행되며 특권 명령을 포함한 모든 종류의 명령을 수행할 수 있는 모드.
유저 모드란?
: 응용 프로그램 코드가 실행되며 특권 명령을 제외한 일반 명령들을 수행할 수 있는 모드.
프로세스는 두 모드중 하나의 모드만을 가지는 것이 아니라, 실행되는 동안 수없이 유저모드와 커널모드를 반복하면서 실행된다.
예를 들어 프로세스가 사용자 모드에서 작업을 수행하다 하드웨어 접근 등 보안에 필요한 중요한 명령을 수행해야 할 경우에는 시스템 콜(소프트웨어 인터럽트)을 통해 운영체제에게 서비스를 대신해 줄 것을 요청한다. 그러면 CPU의 제어권은 다시 운영체제로 넘어가게 된다.
사용자 모드에서 커널 모드로 전환이 일어나는 경우는 2가지인데, 시스템 콜과 인터럽트 발생이다.
인터럽트에 대해 설명해주세요.
: 입출력 완료나 예외상황 등이 발생했을 때 CPU에게 신호를 보내 처리할 수 있도록 하는 방법.
인터럽트는 신호를 보내는 주체에 따라 하드웨어 인터럽트와 소프트웨어 인터럽트로 나뉜다.
하드웨어 인터럽트에는 I/O 완료, 소프트웨어 인터럽트에는 시스템 콜 등이 있다.
CPU가 인터럽트를 받게 되면, 현재 하던 일을 멈추고 인터럽트 핸들러(인터럽트 서비스 루틴)를 실행한다.
이해하기 : 책을 읽는 도중에 초인종이 울리면, 읽던 페이지에 책갈피(이후에 돌아올 주소)를 놓고 물건을 받으러 간다.
인터럽트가 없다면 다중프로그래밍의 구현은 사실상 불가능하다. 다중 프로그래밍의 핵심은 A 프로세스가 입출력을 시작했을 때 입출력이 완료될 때까지 A 프로세스를 중단 상태로 만들고 B 프로세스를 실행하게 하여 CPU 사용률을 높이는 것이기 때문이다.
다중 프로그래밍 시스템(multi-programming system)에 대해서 설명해주세요.
다중 프로그래밍이란?
: CPU 사용률(컴퓨터 처리율)을 최대화하기 위해 여러 프로그램을 메모리에 올려놓고 CPU가 항상 사용되도록 하는 기법.
어떤 프로세스가 CPU를 사용하다가 I/O 작업 등 CPU를 필요로 하지 않는 순간이 오면 다른 프로세스가 CPU를 사용할 수 있도록 전환(컨텍스트 스위칭)하는 방식이다.
다중 프로그래밍 도입으로 인한 이슈
- CPU 스케줄링 : 어떤 프로세스를 선택할지에 대한 기준이 필요하게 됨
- 컨텍스트 스위칭 : 실행이 중단되는 프로그램의 상태(컨텍스트)를 별도의 공간에 저장해두고 나중에 다시 CPU에 복귀시켜야 했음
- 인터럽트(interrupt) : I/O 장치로부터 입출력이 완료되었음을 전달받을 방법이 필요하게 됨
- 자원 동기화(synchronization) : 동일한 자원을 동시에 사용하는 문제가 발생, 프로그램 사이의 조율이 필요하게 됨
- 교착상태(deadlock)
- 큰 메모리 : 메모리에 프로그램을 여러개 올려야 하기 때문
- 여러 프로그램의 메모리 할당 및관리
- 메모리 보호
시분할 시스템에 대해서 설명해주세요.
시분할 시스템이란?
: 다중 프로그래밍에서 확장된 것으로, 각 프로그램이 실행되는 동안 사용자들이 대화식으로 상호작용할 수 있도록 프로세스 간 CPU 코어를 자주 전환하는 시스템.
CPU가 하나의 프로그램을 수행하는 시간을 매우 짧은 시간(ms)으로 제한하여 프로그램을 번갈아 수행하도록 함으로써, 싱글 코어 CPU 환경에서도 사용자가 각각의 프로그램들을 동시에 사용하는 듯한 효과를 가져오게 된다.
시분할 시스템의 핵심
시분할 시스템의 핵심은 타임슬라이스이다.
입출력 발생시에도 스케쥴링(컨텍스트 스위칭)이 일어나지만 타임슬라이스에서 무조건 스케쥴링을 진행하는 것이다. 이에 따라 한 프로그램에서 입출력 완료 후 대기 시간이 적어졌다. 그에 따라 대화가 빈번한 프로그램도 자연스럽게 수행될 수 있게 되었다.
시분할 시스템 = 다중 프로그래밍 + CPU 스케줄링 + 타임 슬라이스
대화형 시스템(interactive system)
: 사용자 입장에서 입출력 결과가 곧바로 나타나는 시스템.
빈번한 대화, 즉 입출력 요구가 수행시간의 대부분을 차지하는 프로그램이 보편화되는 상황이었다.
이 맥락에서 기존의 다중 프로그래밍은 더 이상의 대화성 증진에는 한계가 있었다.
입출력이 일어날 때에만 스케쥴링이 일어나기 때문에
- 한 프로그램의 입출력 빈도와 시간이 다른 프로그램의 수행에 영향을 준다.
- 한 프로그램의 수행시간이 다른 프로그램의 수행시간에도 영향을 준다.
다중 처리기 시스템(multi-processor system)에 대해서 설명해주세요.
: 1개의 메인메모리에 n개의 프로세서를 사용하여 태스크를 병렬적으로 처리하는 시스템
- 성능 : 프로세서를 여러개 연결하므로 처리 성능이 좋아진다.
- 비용 : 고사양 성능을 보다 저렴한 중간사양 프로세서를 여러개 사용해서 구현할 수 있다.
- 신뢰성 : 하나의 프로세서가 고장나더라도 동작한다.
- 다중 프로세서 OS : 여러개의 프로세서 스케쥴링이 가능한 OS가 필요하다.
폴링에 대해 설명해주세요.
: CPU가 하드웨어 장치의 상태를 수시로 체크하여 명령을 받을 수 있는 상태인지 확인하는 것
CPU가 다른 프로세스를 실행하는 동안 디바이스로부터 발생하는 이벤트를 처리하는 방식
인터럽트는 디바이스가 서비스가 필요함을 CPU에 알리는 반면, 폴링은 CPU가 디바이스 서비스가 필요한지 여부를 반복적으로 확인하는 방식이다.
DMA에 대해 설명해주세요.
: CPU의 개입 없이 메모리와 하드웨어 장치간에 일어나는 데이터 전송
Direct Memory Access의 약자.
동기식 I/O에 대해 설명해주세요.
비동기식 I/O에 대해 설명해주세요.
어려웠던 점
- 개념 학습에 대한 어려움 : 폴링, DMA, 동기식 I/O, 비동기식 I/O는 진입 장벽이 높았음. 제대로 이해하려면 이전에 설정해둔 일주일 학습 시간을 넘기게 되어 포기함. (지나치게 완벽하게 하려고 했는지도 모르겠음)
- 난이도 설정의 어려움 : 면접식 스터디를 처음 해보기 때문에, 이론의 깊이를 어느정도로 할지 감 잡기가 어려웠다. 이건 스터디를 진행하고 실제 면접을 보면서 자연스레 해결될 문제
모의 면접 후 피드백과 느낀 점
- ⚠ 총알 답변 : 다다다다 말하는걸 지양하자. 자꾸 마음이 앞서서 생각보다 말이 먼저 나오게 됐다.
평소처럼 면접에서도 말하는게 면접관 입장에서도 듣기 좋다. - ⚠ 인터럽트에 틀린 부분이 있었음 : 인터럽트 신호 처리 과정을 서술할 때 I/O장치만 말했다.
이것도 침착하게 더 생각을 못한 탓이다. - 💡 “잠시 생각할 시간 가져도 괜찮을까요?” : 침착하게 생각할 시간을 벌어주는 마법의 문장.
- 💡 아는 질문 나왔을 때 최대한 길게 끌고 가는 것이 좋다. 면접을 유리하게 이끌음
- ❗ 지식을 내걸로 만들자. 딱딱한 사실 나열보다는, 개념들이 구체적으로 어떤 특징과 장단점을 갖고 있으며 구체적인 사례로는 어떤 것이 있는지까지 말해야 100점 받을 수 있다.
- ❗ 평소에 공부 내용을 정리하면서 말하는 연습이 필요하다!!
인형이라도 사서 실전 면접이라고 생각하면서 혼자 연습을 많이 해봐야겠다. - ❗ 평소에 "말씀을 참 잘하시네요"라는 말을 듣을 수 있도록 연습을 해야겠다. 말투나 어조, 뉘앙스의 차이라서 사소해보일 수도 있지만, 면접관 입장에서 앞으로 같이 할 팀원을 뽑는 것이기 때문에 꽤 큰 플러스 요인으로 작용할 것이라고 생각한다.
- 다들 진심이시다. 배울 점이 너무 많아서 앞으로 4주간 좋은 경험이 될 듯 하다.
참고 자료
- 명품 운영체제 - 황기태
- https://github.com/Seogeurim/CS-study/tree/main/contents/operating-system#CPU-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81
- https://www.geeksforgeeks.org/time-sharing-operating-system/
'CS > 운영체제' 카테고리의 다른 글
[OS] 스터디 3주차 : CPU 스케줄링 (0) | 2023.09.30 |
---|---|
[OS] 스터디 2주차 : 프로세스와 스레드 (0) | 2023.09.22 |