컴퓨터 시스템 구조 🍳
- 이화여대 반효경 교수님의 운영체제 강의를 듣고 작성하였습니다. 🙂
컴퓨터 시스템 구조
CPU: 매 Clock Cycle 마다 메모리에서 기계어를 하나씩 읽어와 실행시킨다.
Register : CPU 안에 메모리보다 더 빠른 정보를 저장할 수 있는 공간
mode bit : CPU에서 실행되는 것이 운영체제인지 사용자 프로그램인지를 구분해주는 역할을 한다.
- 1 사용자모드 : 사용자 프로그램 수행
- 0 모니터 모드(=커널 모드) : OS 코드 수행
- Exception 이나 Interrupt 발생시 하드웨어가 mode bit을 0으로 바꿈
- 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 셋팅
- 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 OS에 피해가 가지 않도록 하기 위한 보호장치임
Timer : 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킨다.
- 타이머는 매 클럭 틱 때마다 1초씩 감소
- 타이머 값이 0이 되면 인터럽트 발생
- CPU를 특정 프로그램이 독점하는 것으로부터 보호
Interrupt line : Device가 한 작업을 마쳤는지에 대한 경계선 같은 것이다.
DMA Controller : 작업 완료 후 local buffer의 내용을 직접 Memory로 복사 후 CPU 에 interrupt
CPU에 계속 interrupt가 걸려 효율이 떨어지는 것을 방지하기 위한 것이다.
Memory: CPU 의 작업 공간
DISK: 데이터를 Memory로부터 읽어들이기도 하고 (Input) 처리 결과를 File System에 저장(Output)하기도 한다.
각각의 I/O Device들은 Device controller 라는 device를 전담하는 CPU 같은 것들이 붙어있다.
Device Controller는 I/O 가 끝났을 경우 interrupt로 CPU에 그 사실을 알린다.
ex) Disk의 내부를 통제하는 것은 CPU가 아니라 controller
Device controller에게도 작업 공간이 필요한데, 이것을 local buffer라고 부른다.
입출력(I/O)의 수행
사용자 프로그램은 시스템 콜을 통해 I/O를 수행한다.
🎈 trap을 사용해 인터럽트 벡터의 특정 위치로 이동
🎈 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
🎈 올바른 I/O 요청인지 확인 후 I/O 수행
🎈 I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김
인터럽트 (Interrupt)
인터럽트 당한 시점의 레지스터와 program counter를 save 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
interrupt (하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
trap (소프트웨어 인터럽트)
- Exception : 프로그램이 오류를 범한 경우
- System call : 프로그램이 커널 함수를 호출하는 경우
📑용어 정리
인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있는 것. (인터럽트 번호, 주소) 의 쌍을 가지고 있음
인터럽트 처리 루틴 : 해당 인터럽트를 처리하는 커널 함수
동기식 입출력 (Synchronous I/O)
I/O 장치의 상태를 직접 가서 보고 오는 것
I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
(I/O 요청 후 완료 후에야 instruction을 실행할 수 있음)
구현 방법 1
- I/O가 끝날 때까지 CPU를 낭비시킴
- 매시점 하나의 I/O만 일어날 수 있음
구현 방법 2
- I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
- I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
- 다른 프로그램에게 CPU를 줌
비동기식 입출력 (Asynchronous I/O)
I/O 장치의 상태를 직접 확인하지 않는 것
I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
(I/O 요청 후 instruction을 실행할 수 있음)
DMA (Direct Memory Access)
빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
CPU의 중재 없이 device controller가 device buffer storage의 내용을 메모리에 block 단위로 직접 전송
바이트 단위가 아니라 block 단위로 인터럽트를 발생 시킴
저장장치 계층 구조
Primary는 CPU 가 직접 접근 및 실행 가능, Secondary는 불가능
위로 올라갈수록 용량이 작고, 가격이 높고, 속도가 빠르며 휘발성
캐싱: 빠른 매체로 정보를 읽어들여 쓰는 것 (재사용을 목적으로)