1. 컴퓨터 시스템 구조
1) CPU
- Interrupts(끼어들기)
가장 헷갈린 부분이 '왜 발생하는가?' 였다 ➡️ 프로그램을 실행하는 도중 예기치 않은 오류가 발생했을 때 인터럽트가 호출된다
인터럽트 벡터는 인터럽트의 처리 루틴 주소를, 인터럽트 처리 루틴(=핸들러)은 해당 인터럽트를 처리하는 커널 함수를 의미
컨트롤러가 드라이버에게 작업완료사실을 인터럽트를 통해 전달한다
하드웨어는 어느 순간이든 시스템을 통해 CPU에 신호를 보내서 인터럽트를 발생시킬 수 있다
CPU가 인터럽트되면, 하던 일을 중단하고 즉시 고정된 위치로 실행을 옮긴다. 고정된 위치에는 인터럽트를 위한 서비스 루틴이 있는 시작 주소를 가지고 있고, 인터럽트 서비스 루틴 실행이 완료되면 인터럽트되었던(중단되었던) 연산을 재개한다
== 인터럽트된 시점의 레지스터와 pc를 저장한 후 CPU의 제어를 핸들러(인터럽트 처리 루틴)에 넘긴다
인터럽트는 인터럽트 핸들로를 통해 호출된다
굉장히 자주 발생한다
인터럽트된 정보를 모두 저장해야 인터럽트 처리 후 정보를 복원할 수 있으므로, 인터럽트 루틴은 반드시 현재 상태를 명시적으로 저장하고 복귀하기 전에 상태를 복구해야 함
- Mode bit
사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 장치가 필요
Mode bit는 말 그대로 OS가 어떤 모드에 있는지 알려주는 비트(0, 1)이다
1 사용자모드: 사용자 프로그램을 실행한다(일반적으로 유저가 사용하는 컴퓨터 상태로 이해)
0 모니터모드(= 커널 모드, 시스템 모드): OS의 코드를 수행한다. 보안을 해칠 수 있는 중요 명령어(특권 명령)는 모니터 모드에서만 수행 가능.
Interrupt, Exception 발생 시 하드웨어가 mode bit을 1에서 0으로 바꾼다
사용자 프로그램에게 CPU를 넘기기(사용자 모드로 돌아가기) 전에 mode bit를 1로 다시 바꾼다
- timer
정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴
매 클럭 틱마다 1씩 감소, 값이 0이 되면 타이머 인터럽트 발생
CPU가 특정 프로그램이 독점하는 것으로부터 보호한다
사용) time sharing 구현 || 현재 시간 계산 등
2) DMA(Direct Memory Access)
빠른 입출력 장치를 메모리에 가까운 속도로, 독립적으로 처리하기 위해 사용한다
CPU의 중재 없이, 디바이스 컨트롤러가 디바이스의 버퍼 스토리지의 내용을 메모리에 블록 단위로 직접 전송한다(!= 바이트 단위)
쉽게 얘기하면 CPU를 거치지 않고 디바이스 컨트롤러가 메모리에 직접 접근한다
3) System Call
사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출(인터럽트를 발생시킬 때 시스템 콜도 일어날 것)
운영체제에 의해 사용가능하게 된 서비스에 대한 인터페이스를 제공한다
다섯 가지 범주(프로세스 제어, 파일 조작, 장치 조작, 정보 유지 보수, 통신/보호)로 나눌 수 있다
4) I/O
- I/O device controller
해당 I/O 장치유형을 관리하는 프로세서(일종의 작은 CPU)
제어 정보를 위해 control register, sattus register 존재
Input/Ouput은 실제 장치(device)와 local buffer 사이에서 일어난다
컨트롤러는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림
(드라이버는 OS 코드 중 각 장치별 처리 루틴(SW)을, 컨트롤러는 장치를 통제하는 프로세서(HW)를 의미)
- 수행
모든 입출력 명령은 특권 명령(mode bit 0에서 수행)
(1) 시스템 콜
(2) trap ➡️ 인터럽트 벡터의 특정 위치로 이동
(3) 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
(4) 올바른 요청인지 확인 후 수행
(5) 제어권을 시스템콜 다음 명령으로 옮김
(싱크로너스와 에이싱크로너스는 API를 어떻게 호출하느냐에 따라 달라진다)
- Synchronous(동기식 입출력)
I/O의 요청 후 입출력 작업 완료 후에 제어가 사용자 프로그램에 넘어간다
구현 1. I/O가 끝날 때까지 CPU를 낭비시키고, 매시점 하나의 I/O만 일어날 수 있음
구현 2. 매시점 하나의 I/O만 일어날 수 있음
결과값 받기 전까지 대기, 아무것도 안함
- Asynchronous
입출력 작업 끝날 때까지 안 기다리고 제어가 사용자 프로그램에 즉시 넘어감
유저와 HW가 서로 협력하지 않고 독립적으로 움직임
5) I/O 명령어
- I/O를 수행하는 special instruction에 의해) 장치마다 다른 명령어를 쓰는 방식
- Memory Mapped I/O에 의해) 메모리 + 명령어 공통 지정 ➡️ 프로그램을 일관적/간결하게 만든다
6) 저장장치 계층 구조
2. 프로그램의 실행
1) 디스크에 존재하는 프로그램을 메모리에 올려 CPU를 할당 받는다
- CPU를 할당받을 수 있는 상태 = 프로세스
- 프로세스는 바로 물리 메모리에 올라가지 않고, 가상 메모리에서 가상 주소공간(케바케지만 32bit 기준으로는 4GB)을 가진다
2) 가상 주소공간에서 실제 프로그램 실행 시, 필요 부분은 block 단위로 물리 메모리에 올라감(필요 없는 부분은 안 올라간다)
'Operating System' 카테고리의 다른 글
[운영체제] Deadlocks (0) | 2022.05.09 |
---|---|
[운영체제] Process Management (0) | 2022.04.11 |
[운영체제] Introduction to Operating System (0) | 2022.04.04 |