본 글은 KOCW 이화여대 반효경 교수님의 운영체제 강의를 듣고 정리한 내용입니다.
http://www.kocw.net/home/m/search/kemView.do?kemId=1226304
- 운영체제의 종류, 특히 공개/비공개 소프트웨어에 대해 구체적으로 알아본다.
- 운영체제의 정의, 목적, 분류, 예, 구조를 알아보고, 과목 성격이 개발자 관점의 운영체제 이해임을 이해한다.
- 컴퓨터 시스템의 구조와 관련해, 프로그램 수행에 Mode bit, Timer 등이 어떻게 작동하는지 알아본다.
- 인터럽트가 운영체제를 구동시키는 원리와 인터럽트의 한 종류인 시스템콜에 대해 알아본다. 동기식/비동기식 입출력에서의 인터럽트, DMA를 이용한 인터럽트 조절에 대해 알아본다. 계층구조에 의해 I/O에서 입출력명령어가 다름을 이해한다.
컴퓨터시스템의 구조
🔹 구조
🔹 Mode bit
🔹 Timer
- 일정시간을 바탕으로 interrupt를 발생시킴
- 운영체제가 CPU를 넘길때 timer에게 time을 세팅한 후 넘기기때문에, 시간에 되면 운영체제에게 cpu 제어권이 넘어가게됨
- 타이머는 매 클럭 틱 때마다 1씩 감소
- 타이머 값이 0 이 되면 타이머 인터럽트 발생
- CPU를 특정 프로그램이 독점하는 것으로부터 보호함
- time sharing을 구현하기 위해 널리 이용되고, 현재 시간을 계산하기 위해서도 사용됨
🔹 Interrupt
🔹 Device controller
- ✔ I/O device controller : hardware
- 각 장치를 통제하는 일종의 작은 CPU
- local buffer를 가짐
- I/O는 실제 device와 local buffer 사이에서 일어남
- Device controller 는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림
- ✔ device driver : 운영체제 안에 있는 코드 중 CPU가 부탁하는 방법이 적힌 기계어
- CPU 가 수행하는 코드
- software
- OS 코드 중 각 장치별 처리루틴
🔹 동기식 입출력과 비동기식 입출력
- 두 경우 모두 I/O 의 완료는 인터럽트를 통해 알림
- ✔ Synchronous I/O (동기식입출력)
- I/O 요청 후 입출력 작업이 완료된 후에야, 제어가 사용자 프로그램에 넘어감
- 구현방법 1
- I/O 가 끝날때까지 CPU를 낭비시킴
- 매시점 하나의 I/O만 일어날 수 있음
- 구현방법 2
- I/O 가 완료될때까지 해당프로그램에게서 CPU를 빼앗음
- I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
- 다른 프로그램에게 CPU를 줌
- ✔ Asynchronous I/O (비동기식입출력)
- I/O 가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
🔹 DMA (Direct Memory Access)
- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기위해 사용
- CPU 의 중재 없이 device controller 가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
- 바이트 단위가 아니라 block 단위(DMA가 메모리로 복사하는 과정까지 다하고나서)로 interrupt를 발생시킴 (평소보다 덜 빈번하게 interrupt 발생)
🔹 서로 다른 입출력 기계어
- I/O를 수행하는 special intruction에 의해 (I/O 전담 기계어)
- Memory Mapped I/O 에 의해 (메모리 주소를 I/O장치에도 연장해서 매겨둔 것)
🔹 프로그램의 실행 (memory load)
- Virtual memory 와 Physical memory 의 차이! - 다른 주소이기 때문에 Address translation 이 필요함
- Kernel Address space = Virtual memory 의 구조 ,
- code : CPU에서 실제로 수행할 기계어
- data : 프로그램이 실행되다가 메모리에서 쓰는 경우 (전역변수나 프로그램 시작부터끝까지 남아있는 변수)
- stack : 함수 호출과 return 관련한
- 커널 주소 공간의 내용
🔹 사용자 프로그램이 사용하는 함수
- 함수(func)
- 사용자 정의 함수 : 자신의 프로그램에서 정의한 함수
- 라이브러리 함수 : 자신의 프로그램에서 정의한것이 아닌, 가져다 쓴 함수
- 커널 함수 : 운영체제 프로그램의 함수
- 커널함수의 호출 = 시스템콜
- kernel address space