컴퓨터:
I/O 장치: 디스크(input-읽어들임/output-처리 결과를 파일 시스템에 저장), 키보드(input), 프린터, 모니터(output)
입출력 작업이 완료된 후에야
제어가 사용자 프로그램에 넘어감입출력 작업이 끝나기를 기다리지 않고
제어가 사용자 프로그램에 즉시 넘어감두 경우 모두 I/O의 완료는 인터럽트로 알려줌.
모든 입출력 명령은 특권 명령이다.
인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
인터럽트
현대의 운영체제는 인터럽트에 의해 구동된다.
- 좁은 의미 (하드웨어 인터럽트): 하드웨어(타이머, I/O device 등)가 발생시킨 인터럽트
- 넓은 의미 (하드웨어 인터럽트 + 소프트웨어 인터럽트)
- Exception: 프로그램이 오류를 범한 경우
- System call: 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 경우. 사용자 프로그램이 interrupt line을 세팅.
사용자 프로그램은 어떻게 I/O를 하는가?
1. I/O를 요청하기 위해서는소프트웨어 인터럽트
를 건다.
시스템 콜(system call): 사용자 프로그램이 운영체제에게 I/O 요청 (커널의 함수를 호출: 프로그램이 직접 interrupt line을 세팅하는 함수를 실행)하면 CPU는 mode bit을 0으로 전환하고 운영체제에게로 제어권 넘어감
trap(software interrupt)을 사용하여 인터럽트 벡터의 특정 위치로 이동
제어권이 인터럽트 벡터(각각의 인터럽트 종류마다 해당 인터럽트의 처리 루틴 주소를 가지고 있는 테이블)가 가리키는 인터럽트 서비스 루틴(= 인터럽트 핸들러, 해당 인터럽트를 처리하는 커널 함수)으로 이동
2. I/O 요청이 완료되면하드웨어 인터럽트
를 건다.
I/O 완료 시 인터럽트 서비스 루틴이 실행되어 I/O 작업 완료를 처리하고, 제어권을 시스템 콜 다음 명령으로 옮겨서 중단되었던 지점에서 실행 재개.
CPU 레지스터: 메모리보다 더 빠르면서 정보를 저장할 수 있는 작은 공간
CPU mode bit:
사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호장치 필요.
Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation 지원 (지금 CPU에서 실행되는 것이 운영체제인지 사용자 프로그램인지를 구분해줌)
- 사용자모드 (1): 사용자 프로그램 수행
- 모니터모드(= 커널 모드, 시스템 모드) (0): OS 코드 수행
특권 명령
으로 규정interrupt line: CPU가 메모리에 있는 instruction을 순차적으로 실행을 하다가, 외부 장치로부터 발생하는 I/O 작업(ex. 디스크에서 무언가를 읽어옴, 키보드 입력 발생 등)이 있을 때 CPU에게 현재 실행 중인 프로세스를 일시 중단하고 인터럽트 요청을 우선적으로 처리해야함을 알리는 역할. CPU는 메모리에 있는 instruction 실행 -> interrupt line 확인 -> instruction 실행 -> interrupt line 확인 -> ...을 반복한다.
CPU는 I/O작업이 필요할 때 직접하는 것이 아니라 device controller에게 시키고, 다시 메모리 접근을 통해 instruction을 계속 실행한다.
타이머:
사용자 프로그램이 disk에서 파일을 읽어오도록 요청했을 때 어떤 일이 발생하나?
1. 프로그램이 운영체제에게 파일 읽어오는 것을 요청하도록 system call을 걸고 CPU 제어권이 운영체제로 넘어간다.
2. CPU가 disk controller에게 파일을 읽어들이라고 명령한다.
3. disk controller가 local buffer에 파일을 적재하는 동안 CPU는 다른 프로세스의 instruction을 실행하고 있는다.
4. CPU가 interrupt line을 확인했는데 disk controller로부터 파일을 모두 적재했다는 interrupt 신호가 와있으면, interrupt의 type을 확인하고, 실행중인 프로세스의 상태를 저장하고, 인터럽트 핸들러를 실행(local buffer에 적재된 데이터를 시스템콜을 요청한 프로세스의 메모리 영역으로 copy하거나, 데이터를 요청한 프로세스에게 알리는 작업 등)한다.
5. 프로세스 큐에서 system call을 시작한 프로세스가 다시 실행될 차례가 되면 디스크에서 읽어들인 파일 데이터를 필요한 작업에 사용한다.
DMA(Direct Memory Access):
CPU 내부 register - cache memory (SRAM으로 구성됨) - main memory (DRAM으로 구성됨) - magnetic disk - optical disk - magnetic tape
<-------------------primary(executable: CPU가 직접 접근 가능)------------------> <-------------------secondary--------------->
<--- speed, cost, volatility---
프로그램은 보통 실행 파일 형태로 파일 시스템(하드 디스크 등)에 저장이 되어 있음. 실행 시키면 (가상 메모리가) 물리 메모리로 올라감. 중간에 가상 메모리라는 단계를 한 번 더 거침.
프로그램을 실행시키면 프로그램의 독자적인 메모리 주소 공간(가상 메모리, 각 프로그램마다 0번지부터 시작)이 만들어짐. 가상 메모리는 code, data(전역 변수 등), stack(함수의 실행 순서 관리)으로 구성됨.
커널은 부팅 이후 메모리에 상주해있지만, 프로그램은 실행시키면 생기고 종료하면 없어짐. 이 때 가상 메모리를 통째로 물리메모리에 다 올리는 것이 아니라 필요한 일부분만 올림. 물리 메모리에 올라가있더라도 프로세스가 종료되기 전에 불필요해질 경우 (하드 디스크 내부의) swap area로 쫓겨남.
가상 메모리가 물리 메모리로 올라갈 때 주소 변환 필요.
사용자 정의 함수
라이브러리 함수
참고: