컴퓨터 시스템 구조
흔히 알고 있는 컴퓨터란 사실 CPU 와 memory 를 칭한다. 그 외 하드디스크 키보드 마우스 프린터 모니터 등등은 I/O device (입/출력 장치)라고 한다.
CPU
- CPU는 매 순간(클럭사이클)마다 메모리에서 인스트럭션(기계어)를 하나씩 읽어서 실행한다.실행 후 인터럽트 라인을 체크하고 인터럽트가 존재하지 않으면 다음 인스트럭션을 실행한다.
- CPU 안에는 메모리보다 더 빠르고 정보를 저장할 수 있는 더 작은 공간 register 가 있다. 그리고 cpu 안에는 현재 실행되는 것이 사용자의 프로그램인지 운영체제인지 구분하는 mode bit 이 존재한다.
- 사용자의 프로그램이 CPU를 제어하다가 사용자가 키보드나 마우스같은 입출력 장치를 사용하면 local buffer 가 cpu 에게 인터럽트를 걸고, 인터럽트가 들어오게 되면 CPU는 자동적으로 제어권이 운영체제에게 넘어가게 된다.
Mode bit
사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치 필요
0 : 모니터모드 (커널, 시스템 모드)
- 모드빗의 값이 0일 때에는 운영체제가 CPU를 제어하고 있다는 뜻으로 메모리 접근, i/o device 접근하는 인스트럭션 모두 허용된다.
1 : 사용자 모드
- 반대로 값이 1일 때에는 사용자 프로그램이 CPU를 제어하고 있다는 뜻으로 보안을 해칠 수 있는 중요한 명령어는 제한된다. 이를 특권 명령 이라고 한다.
Memory
I/O device
- 기기를 사용하면 컴퓨터안으로 입력되는 입력 장치 Input Device 이다.
- 키보드와 마우스
Output device
- 처리결과를 내보내는 것이기 때문에 Output Device 이다.
- 프린터와 모니터
I/O device controller
- 해당 I/O 장치유형을 관리하는 일종의 작은 CPU
- 제어 정보를 위해 control register, status register를 가짐
- local buffer 를 가짐 (일종의 data register)
- I/O는 실제 device 와 local buffer 사이에서 일어남
- device controllersms I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알린다.
device driver (장치구동기) : OS코드 중 각 장치별 처리루틴 (software)
device controller (장치제어기) : 각 장치를 통제하는 일종의 작은 CPU (hardware)
Disk
- 보조기억장치인 하드디스크는 입 출력 동시 수행하는 장치이다.
- 디스크 내 정보를 메모리가 읽기도 하고 처리 결과를 디스크의 파일 시스템에 저장하기도 한다.
- 각각의 I/O 디바이스는 그 디바이스를 전담하는 작은 CPU 같은 것들이 붙어있는 데 그것이 device controller 이다.
- 그리고 CPU의 작업공간인 메모리가 있듯이 각 device controller의 작업 공간인 local buffer 가 존재한다.
DMA controller
- 다이렉트 메모리 액세스 컨트롤러
- I/O device 들을 통해 CPU가 너무 많은 방해를 받게되는 것을 방지한다.
- local buffer 에 쌓인 내용을 메모리에 복사하는 일을 대신 수행한다.
Timer
- 특정 프로그램이 CPU를 독점하는 것을 방지하기 위한 하드웨어이다.
- 처음엔 CPU를 운영체제가 가지고 있다가 사용자 프로그램에게 cpu 를 빌려주기 전 타이머에 시간 세팅을 한다.
- 타이머는 매 클럭 틱 때마다 1씩 감소한다. 타이머의 값이 0이 되면 타이머 인터럽트가 발생한다.
- cpu는 하던 일을 멈추고 인터럽트에 따라 cpu의 제어권이 사용자 프로그램에서 운영체제로 넘어가게 된다.
I/O 수행
- 모든 입출력 명령은 특권명령임으로 사용자 프로그램에서 직접적으로 수행할 수 있는 권한이 없다.
- 사용자 프로그램은 운영체제에 커널함수를 호출하여 I/O 요청을 하는데 이를 시스템 콜(system call) 이라고 한다.
- 사용자 프로그램이 인터럽트 라인을 세팅하는 인스트럭션을 실행한다.
- CPU는 인터럽트를 받았기 때문에 운영체제로 제어권이 넘어가고 이때 사용자 프로그램의 시스템 콜을 보고 I/O 명령을 수행한다.
Interrupt
- 인터럽트 당한 시점의 레지스터와 program counter를 save 한 후 CPU의 제어를 인터럽트 처리 루틴에 넘기는 것을 보편적으로 의미한다.
- 넓은 의미로는 하드웨어 인터럽트와 소프트웨어 인터럽트 두가지를 포괄적으로 지칭한다.
Trap = 소프트웨어 인터럽트
- exception: 프로그램이 오류를 범한 경우
- system call: 프로그램이 커널 함수를 호출하는 경우
인터럽트 처리 루틴 (인터럽트 핸들러)
- 인터럽트의 종류와 종류별 해야할 일들이 운영체제에 코드로 정의 되어 있는 것.
- 해당 인터럽트를 처리하는 커널 함수
반효경 교수님의 3. System Structure & Program Execution 1 를 통해 작성됨