- device controller: I/O device는 각각이 해당 컨트롤러를 가지며, 이것이 작은 CPU 역할을 하며 디바이스를 전담.
- I/O가 끝났을 때 interrupt line을 통해 CPU에 해당 사실을 알린다.
- local buffer: 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한, device controller의 작은 메모리 공간.
- register: CPU의 내부에 위치하며, 가장 빠른 속도로 접근이 가능한 저장 공간. register는 크게 주소 레지스터, 상태 레지스터, 데이터 레지스터로 이루어져 있다. 예시로, 계산을 수행 중인 값은 데이터 레지스터에 저장된다.
- mode bit: CPU에서 현재 실행하고 있는 것이 운영체제인지, 사용자 프로그램인지를 구분.
- 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치
0
은 모니터 모드로 OS 코드를 수행1
은 사용자 모드로 사용자 프로그램을 수행- mode bit이 1(사용자 모드)일 때는 제한적인 인스트럽션 실행만이 가능한데, 이를
일반 명령
이라 한다. - mode bit이 0(모니터 모드)일 때는 OS 코드를 수행할 수 있는데, 이를
특권 명령
이라 한다.
- Interrupt line: 메모리의 다음 인스트럭션을 가져오기 위한 라인.
- Timer: 정해진 시간이 흐른 뒤 사용자 프로그램에서 운영체제로 CPU 제어권이 넘어가도록 하는 하드웨어
- 타이머는 매 클럭 틱 때마다 1씩 감소
- 타이머 값이 0이 되면 타이머 인터럽트가 발생
- 인풋이 필요하지 않고 무한루프를 도는 프로그램이 있다면 타임 셰어링이 불가능해진다. Timer가 존재한다면 이를 막을 수 있다.
- 특정 프로그램이 CPU를 독점하는 것을 막기 위함
- CPU는 하나의 인스트럭션이 종료될 때마다 interrupt를 확인하는데, 이때 타이머 인터럽트가 발생한 것이 확인된다면 해당 사용자 프로그램은 CPU 제어권을 잃게 된다.
- DMA(Direct Memory Access) controller: 로컬 버퍼에 데이터가 올라가는 일이 끝나면, 해당 컨트롤러는 I/O 데이터를 메모리에 올리고, 모두 끝나면 interrupt line을 통해 CPU에 완료 사실을 알린다.
- I/O가 발생할 때마다 CPU가 메모리에 접근하여 이를 저장하는 것보다 오버헤드가 낮아진다.
- memory controller: CPU와 DMA controller가 동시에 메모리에 접근하여 정보를 사용하거나 쓰면 충돌이 일어나기 때문에 이를 제어해주는 컨트롤러
- 모든 입출력 명령은 특권 명령이다.
- 그렇기 때문에 사용자 프로그램은 I/O 작업을 원한다면 스스로 운영체제에게 CPU 제어권을 넘겨주고 I/O 작업을 요청(
시스템 콜 system call
)하게 된다. - 시스템 콜 system call
- 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
- 이때 사용자 프로그램은 직접 메모리 주소를 점프할 수 없기 때문에 CPU에게 interrrupt line을 통해 요청, CPU가 이를 처리한다. 이때의 interrupt를 trap이라고 한다.
- interrupt의 종류에 따라 어떤 처리를 하는 지에 대해 적혀있는 테이블을 인터럽트 벡터라고 한다.
현대의 운영체제는 인터럽트에 의해 구동된다.
- 인터럽트 당한 시점의 register와 program counter를 저장한 후 CPU의 제어를 (벡터가 가진) 인터럽트 처리 루틴에 넘긴다.
- Interrupt(하드웨어 인터럽트): 하드웨어가 발생시킨 인터럽트
- Trap(소프트웨어 인터럽트): 프로그램이 오류를 범했거나 프로그램이 커널 함수를 호출(시스템 콜)하는 경우
- 동기식 입출력: I/O 요청 후 해당 입출력 작업이 완료된 후에야 사용자 프로그램에 제어권이 넘어가는 방식. 인스트럭션을 실행할 수 없다.
- 비동기식 입출력: I/O 요청 후 해당 입출력 작업을 기다리지 않고 사용자 프로그램에게 바로 제어권을 넘기는 방식. 인스트럭션을 실행할 수 있다.
→ 위 두 가지 방식은 모두, 프로세스가 CPU 소유여부와는 무관하다.
- CPU는 primary 저장계층에 직접 접근이 가능하기 때문에 byte 단위로 정보를 가져온다.
- 반대로 secondary 저장계층에 직접 접근이 불가능하기 때문에 섹터 단위로 정보를 가져온다. → excutable하지 않은 매체
- Caching: 재사용을 목적으로 한다. 일단 한 번 위로 올라온 secondary 정보를 primary(캐시 메모리)에 저장한다. 용량이 작기 때문에 기준을 두고 기존 데이터를 휘발시키는 특성을 지닌다.