출처 : SNUON / 운영체제의 기초: 쉽게 배우는 운영체제 원리 / 서울대 홍성수 교수님
I. Computer Systems Architecture




System bus
- 각 장치 사이의 데이터 전송을 담당하는 회로
- data bus : 실제 데이터를 주고받는 bus
- address bus : address (data의 source, destination)를 주고받는 bus
Bus master
- bus transaction을 시작할 수 있는 장치
- ex) CPU, I/O device controller, DMA controller 등
Bus slave
- bus master의 명령을 받고 수행하는 장치
- bus slave는 데이터를 저장하기 때문에 address를 가지고 있어야 한다
- ex) main memory, I/O device controller
Bus arbiter
- 여러 bus master가 bus를 장악하려고 할 때 bus request signal을 받고 우선순위가 높은 bus master 선정해서 bus를 제공하는 장치

I/O device controller
- CPU 대신해서 I/O operation을 관장하는 장치
- 역할 1 : output register 안에 데이터가 있으면 I/O 디바이스로 출력한다
- 역할 2 : input register 가 비어있으면 I/O device 에서 데이터를 읽어온다
Interrupt-driven I/O
1. CPU가 출력할 데이터를 I/O device controller의 output register로 전송하고 output 하라는 명령을 보낸 뒤 돌아간다.
2. I/O device controller는 I/O device가 가용한 상태인지 확인하고 가용하면 output 명령을 수행한다
3. 작업이 끝나면 interrupt를 통해 CPU에게 작업 완료를 알려준다
Polling I/O
1. CPU가 출력할 데이터를 I/O device controller의 output register로 전송하고 output 하라는 명령을 보낸 뒤 무한 루프를 돌면서 I/O device controller의 레지스터들의 상태를 계속 확인한다.
2. 작업의 종료까지 직접 확인하기 때문에 interrupt가 발생하지 않는다

I/O controller의 여러 레지스터에 접근해야 하기 때문에 I/O address가 필요하다.
Memory-mapped I/O
- 메모리의 주소 공간의 일부를 할애해서 I/O register의 주소를 매핑한다.
- I/O operation과 data load/store에 대해 같은 instruction을 사용
- ex) 모토로라 계열의 CPU는 memory-mapped I/O 사용
Port-mapped I/O
- I/O register를 위해 별도의 주소 공간을 할애한다.
- I/O operation과 data load/store에 대해 다른 instruction을 사용
- ex) 인텔 CPU는 port-mapped I/O 사용

DMA
interrupt-driven I/O나 polling I/O는 주로 character I/O opertation의 동작 방식이다.
block I/O operation에 대해서도 interrupt-driven 방식을 사용하면 어떻게 될까?
CPU에서 1 byte 단위로 input register를 채운다
→ 1 byte 처리가 끝날 때마다 interrupt를 건다
→ CPU 오버헤드
차라리, 직접 메모리에 접근해서 데이터를 전부 옮기고 결과만 보고한다.
DMA operation
1. CPU가 전송할 block의 시작 주소, block size, read(write) command를 DMA controller에게 제공한다
2. DMA controller는 직접 메모리에 접근해서 word 하나씩 I/O device controller로 옮긴다.
3. block 하나를 다 보내고 나면 CPU에 interrupt를 건다.
II. Interrupt Mechanism

Interrupt는 OS가 존재하기 위해서 하드웨어가 제공해야하는 가장 중요한 매커니즘
HW 인터럽트
CPU 외부적인 원인으로 CPU가 알아야 할 중요한 일이 생겼을 때 발생하는 interrupt
SW 인터럽트 (a.k.a Trap)
현재 수행중인 프로그램에 exception 등의 문제가 발생했을 때 발생하는 interrupt
대부분의 CPU는 SW interrupt를 발생시키는 instruction 제공

Interrupt mechanism
1. 수행중인 프로그램 중단 (물론 instruction 수행중이었다면 해당 instruction 까지 수행)
2. program counter에 있는 address 저장
3. IRQ (interrupt request) number 확인 (interrupt source 확인)
4. IRQ로 interrupt vector table 검색, Interrupt handler의 주소 찾아서 jump
5. ISR (interrupt survice routine) 수행

Interrupt hardware
CPU에 interrupt pin이 있고, pin에 I/O device controller, DMA controller 등의 interrupt source 연결
PIC
- interrupt를 SW적으로 관리해주는 장치
- interrupt mask register 존재 → cpu가 interrupt source 켜고 끌 수 있다.
- IRQ number 저장하는 register 존재 → cpu가 IRQ number 가져올 수 있다.
참고 : CPU가 IRQ number 가져오는 과정
1. CPU가 I/O address 버스로 IRQ number 저장하는 register 지목
2. Data bus를 통해 IRQ number를 가져온다.
III. Hardware Protection Mechanism


mode bit
- processor status register에 있는 하나의 bit
- kernel mode인지 user mode인지 확인
kernel mode
- kernel 프로그램이 돌고 있다
- privileged instruction을 수행할 수 있는 mode
- 모든 memory 영역에 접근할 수 있는 mode
user mode
- user 프로그램이 돌고 있다
- privileged instruction을 수행할 수 없는 mode
- 해당 프로그램에게 부여된 memory 영역에만 접근할 수 있는 mode
privileged instruction
- ex) MMU의 base, bound register는 OS만 접근할 수 있도록 해줘야 한다.

System call
- user program이 I/O operation 등의 kernel privilege 를 필요로 할 경우 interrupt를 발생시킨다.
- Interrupt가 들어오면 CPU는 HW적으로 kernel mode로 바뀌고 ISR이 시스템을 장악한다.

자원의 독점을 막아야 한다는 것이 중요하다. I/O instruction을 마음대로 사용하게 허용한다면 하나의 job이 I/O를 독점할 가능성이 있다.

MMU 이야기를 돌이켜보자.

마찬가지로, CPU 독점을 막아줄 필요가 있다.
'CS > 운영체제' 카테고리의 다른 글
[ETL] Processes and Threads - Process Scheduling (0) | 2022.05.16 |
---|---|
[ETL] Processes and Threads - Process Concept (0) | 2022.05.16 |
[ETL] Functions of OS (0) | 2022.05.14 |
[ETL] Evolution of OS (0) | 2022.05.14 |
Process Synchronization II (0) | 2022.05.14 |