Interview_운영체제/인터럽트/시스템콜/커널/동기, 비동기
✅ 운영체제는 무엇이고 어떤 역할을 수행하는지 설명해주세요.
- 하드웨어와 사용자 프로그램/또는 사용자 간의 인터페이스
- 복잡한 하드웨어 처리를 대신해 주는 역할
- 목적: 1️⃣ 하드웨어 사용 효율적, 형평성있게 2️⃣ CPU, 하드웨어, 메모리 보안
- 기능: 인터럽트, 캐싱, CPU 스케쥴링, 메모리 관리, 디스크 스케쥴링
✅ 시분할 시스템에 대해서 설명해주세요.
- time sharing
- CPU는 하나의 작업만 한번에 할 수 있는데
- CPU 사용 시간을 쪼개서 여러 프로그램을 조금씩 실행하는 것
- 👍🏻 여러 프로그램을 한번에 실행할 수 있다. 효율적
- 오늘날 많은 OS가 이 방식으로 동작
✅ 다중 프로그래밍 시스템(multi-programming system)에 대해서 설명해주세요.
- 여러개의 프로그램이 메모리에 올라가있어 CPU사용을 효율적으로
- 👍🏻 CPU가 연속적으로 쉬지 않고 일할 수 있다
- 👍🏻 Job scheduling
- 👎🏻 memory space interference, deadlock, need to synchronoize properly
✅ 대화형 시스템(interactive system)에 대해서 설명해주세요.
- 프로그램 진행 도중에 유저가 실시간으로 프로그램과 상호작용 할수 있는 시스템
- 프로그램이 진행되는 도중에 사용자로부터 데이터를 입력받아 프로그램 진행에 반영할 수 있는 시스템
- time sharing
✅ 다중 처리기 시스템(multi-processor system)에 대해서 설명해주세요.
- CPU가 여러개
- 👍🏻 병렬 작업
- 👍🏻 하나가 고장나도 다른 CPU가 대신함
✅ 시스템 콜에 대해 설명해주세요.
- 자신이 실행할 수 없는 특권명령 실행을 위해 운영체제에게 부탁하는 것
- 이 특권명령은 자신의 주소 영역을 거스른다.
자신의 주소 영역(기준 레지스터
base register
+limit register
)- 하드웨어의 보안을 위해
커널 모드
,유저 모드
가 있는데, - 특권명령의 경우
커널 모드
에서만 수행 가능 - 따라서 일반 사용자 프로그램이 특권명령을 수행해야 하는 경우
- 시스템 콜을 통해 이를 운영체제에게 대신 부탁하는 것
- 시스템 콜을 하면 인터럽트가 발생하고,
- CPU제어권이 운영체제에게 넘어가게 된다.
✅ 커널에 대해 설명해주세요.
- 운영체제의 가장 핵심 부분
- 메모리에 올라가는 운영체제가 바로 이 커널이다.
- manage CPU scheduling, system call, memory management, I/O
✅ 커널모드에 대해 설명해주세요.
- 모든 명령이 실행될 수 있는 운영체제가 CPU제어권을 가지고 있는 모드
modebit 0
✅ 유저모드에 대해 설명해주세요.
- 사용자 프로그램이 CPU를 가지고 있고, 한정적인 명령만 실행 가능
- 특권 명령을 실행할 수 없고
modebit 1
- 특권명령을 실행하고 싶으면 인터럽트, 즉 시스템 콜을 걸어 운영체제에게 CPU제어권을 넘겨야 한다.
✅ 폴링Polling
에 대해 설명해주세요.
- CPU가 직접 I/O장치에 가서 데이터를 가져오는 방식
- 👎🏻 CPU가 I/O를 직접 해야하기 떄문에 다른 일을 못함, 비효율적
✅ 인터럽트에 대해 설명해주세요.
- CPU에게 처리가 필요한 상황이 발생했음을 알리는 것이다.
- 인터럽트가 발생하면 CPU는 현재 실행하던 프로그램을 멈추고
- 인터럽트 벡터, 인터럽트 처리 루틴
Interrupt Service Routine
을 실행 실행 후 아까 실행하던 프로그램으로 복귀
- 하드웨어 인터럽트: 하드웨어 작업이 끝났을 때 CPU에게 끝났음을 알리기 위해 인터럽트
- timer interrupt
- I/O interrupt
- 소프트웨어 인터럽트
trap
: 사용자 프로그램이 특권명령 실행이 필요해 시스템 콜, 인터럽트
- exception
- system call
- 소프트웨어 인터럽트
- CPU는
PC
가 가리키는 명령 실행 후, 다음 명령 실행 전에인터럽트 라인
을 확인
✅ DMA에 대해 설명해주세요.
- Direct Memory Access
- 💊 인터럽트가 지나치게 많이 걸리는 문제를 해결
- I/O가 너무 자주 일어나 인터럽트도 너무 많이 걸리게 되면 CPU활용이 비효율적이다.
- 원래 메모리에 접근할 수 있는건 CPU뿐이지만, DMA도 메모리에 접근할 수 있게 하여
- I/O에서 넘어온 데이터를
byte
단위가 아니라block
단위로 모아서 CPU에게 전달, - 👍🏻 지나치게 빈번한 인터럽트를 줄인다.
✅ 동기식 I/O에 대해 설명해주세요.
- I/O가 끝날 때까지 CPU가 기다림
- 👍🏻 구현이 간단
- 👎🏻 CPU 낭비
- 그래서 프로그램A가 I/O를 요청했으면 I/O를 하는 동안 프로그램B를 먼저 실행하고있고
- 프로그램A는
CPU 큐
에 줄 세움 - 👍🏻 CPU 효율적으로 사용
✅ 비동기식 I/O에 대해 설명해주세요.
- I/O가 끝날 때까지 CPU가 안 기다림
- I/O 결과가 필요 없는 일을 하거나, 작업이
쓰기
였다면 굳이 기다릴 필요가 없음
✅ 운영체제한테 CPU가 넘어가는 경우는 어떤 경우가 있나요?
- 모두 인터럽트 라인을 세팅하는 경우
- 하드웨어에서 인터럽트: I/O기기에서 작업을 완료해 CPU에게 완료했다고 알릴 떄 인터럽트
- 사용자 프로그램이 인터럽트: CPU에서 권한 밖의 함수를 호출할 때(예를 들어 I/O) 운영체제 커넬 모드
- 사용 위해 시스템 콜, 또는 exception이 발생했을 때
- timer에서 인터럽트 할 수도 있음.
✅ 사용자 프로그램이 CPU를 빼앗기는 경우
- 사용자 프로그램은 계속 쓰고 싶지만, CPU 독점권을 막으려고 timer에서 타임아웃
- 사용자 프로그램이 I/O가 필요해 기다려야 하는 경우
✅ 커널의 종류
✅ 폴링 🆚 푸싱
- 폴링: 프로그램이 하드웨어 장치의 상태를 주기적으로 확인하는 방식
- 👎🏻 장치 시간 간격으로 확인해야 하므로 CPU자원 소모
- 푸싱: 장치가 준비되면 프로그램에게 알림
- 👍🏻 프로그램이 계속 완료되었는지 확인할 필요가 없음
This post is licensed under CC BY 4.0 by the author.