Computer는 CPU와 Memory를 의미하며 host라고도 한다.
I/O Device는 host에 붙어서 데이터를 컴퓨터 안으로 넣는 input이나, host에서 처리된 결과를 내보내는 output장치이다.
우리는 I/O Device를 통해 Computer와 소통하게 된다.
CPU
instruction 실행 - interrupt line체크 반복
매 clock마다 program counter가 가르키고 있는 memory주소에서 instruction(기계어)를 읽어서 실행
interrupt가 들어오면 CPU의 제어권을 운영체제에게 넘김
- interrupt line : CPU에게 키보드 입력, 디스크 파일 읽기 (I/O Device)등의 활동을 전달
- register : CPU내부에 있는 메모리보다 더 빠르게 정보를 저장하는 작은 공간. memory의 주소를 가르키고 있는 program counter존재
- mode bit : CPU에서 실행되는 것이 운영체제인지 사용자프로그램인지 구분
mode bit
- 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보조 장치
- CPU를 사용자 프로그램이 가지고 있는지, 운영체제가 가지고 있는지 구분
- 하드웨어적으로 두가지 모드의 operation 지원
- 운영체제가 가지고 있을 때 : 모니터 모드, 커널보드, 시스템 모드 (0)
- OS 코드 수행
- 보안을 해칠 수 있는 중요한 명령어(특권명령) 수행 가능
- interrupt나 exception 발생시 하드웨어가 mode bit을 0으로 변경
- 사용자 프로그램이 가지고 있을 때 : 사용자 모드 (1)
- 사용자 프로그램 수행
- 한전된 명령어(일반명령)만 수행 가능
- 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1으로 변경
- 운영체제가 가지고 있을 때 : 모니터 모드, 커널보드, 시스템 모드 (0)
Memory
CPU의 작업 공간
Memory Controller
DMA Controller, CPU에서 특정 메모리 영역을 동시에 접근 할 때 문제가 생길 수 있어서 중재하는 역할
DMA Controller(Direct Memory Access)
- I/O 장치들로부터 너무 많은 interrupt가 발생하면 CPU가 방해 받음 (overhead발생)
- 과정 : I/O 작업 > 결과 local buffer에 입력 > DMA Controller가 읽어서 memory에 복사 > 작업 다 끝나면 CPU에 interrupt
- DMA Controller가 일을 다 한 것을 보고만 해주므로 CPU가 interrupt당하는 횟수가 줄어듬
- 원칙적으로 memory에 접근 할 수 있는건 CPU뿐이었는데 DMA Controller도 접근 할 수 있게 됨
Timer
- 정해진 시간이 흐른 뒤 운영체제에게 CPU제어권이 넘어가도록 interrupt발생
- 타이머는 매 clock마다 1씩 감소
- 타이머 값이 0이 되면 타이머 interrupt발생
- CPU를 특정 프로그램이 독점하는 것으로부터 보호
- Time Sharing을 구현하기 위해 이용
Device Controller(장치 제어기)
- 해당 I/O 디바이스를 전담하는 일종의 작은 CPU
- 제어 정보를 위해 control register, status register를 가짐
- 작업공간인 Local Buffer를 가짐 (main cpu의 memory같은 역할)
- I/O는 실제 device와 local buffer사이에서 일어남
- I/O가 끝났을 경우 cpu에게 interrupt
Local Buffer
- 장치 제어기의 작업공간 (main cpu의 memory 같은 역할)
입출력(I/O)의 수행
모든 입출력 명량은 특권명령
사용자 프로그램은 어떻게 I/O를 하는가?
- 시스템 콜 (Sytem Call)
- 사용자 프로그램이 운영체제의 커널 함수를 호출하는 것
- 사용자 프로그램은 운영체제에게 I/O 요청
- trap을 사용하여 인터럽트 백터의 특정 위치로 이동
- 제어권이 인터럽트 백터가 가리키는 인터럽트 서비스 루틴으로 이동
- 올바른 I/O요청인지 확인 후 I/O 수행
- I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김
인터럽트 (Interrupt)
인터럽트 당한 시점의 레지스터와 program counter를 저장한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다
- Interrupt (하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
- Trap (소프트웨어 인터럽트)
- System call : 프로그램이 커널 함수를 호출하는 경우
- Exception : 프로그램이 오류를 범한 경우
관련 용어
- 인터럽트 백터(인터럽트 번호 - 인터럽트 처리 루틴 주소 쌍) : 해당 인터럽트의 처리 루틴 주소를 가지고 있음
- 인터럽트 처리 루틴(= interrupt service routine, 인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수. 실제 해야 할 일
- 운영체제 안에 인터럽트 마다 왜 인터럽트가 걸렸는지 이유와, 인터럽트 상황에 맞게 처리해야할 일들이 커널 함수로 정의 되어 있음
현대의 운영체제는 인터럽트에 의해 구동됨
1) System call (시스템 콜)
- 사용자 프로그램이 운영체제 서비스를 받길 원할 때, 운영체제 주소로 점프 해야하는데 mode bit이 1일 때는 못하기 때문에 시스템 콜을 통해 mode bit을 0으로 바꿈
- 사용자 프로그램이 운영체제 함수를 호출(시스템 콜)하게 되면 의도적으로 인터럽트 라인을 세팅함
- 인터럽트 라인이 세팅됐기 때문에 CPU는 하던 일을 멈추고 제어권을 운영제제에게 넘겨줌
2) Timer (타이머)
- 운영체제가 CPU를 사용자 프로그램에게 넘겨줄 때 mode bit을 1로 바꿔서 넘겨주기 때문에 보안에 어긋난 행동을 할 수는 없으나 CPU를 가지고 놓지 않을 수 있음(무한루프)
- 이를 대비해 사용자 프로그램에 CPU를 넘겨줄 떄 타이머에 시간을 세팅, 이후 시간이 다 되면 CPU를 뺏음
- 운영체제는 타이머의 도움을 받아서 여러 프로그램이 번갈아가면서 CPU를 쓸 수 있게 함
3) I/O
- I/O 요청 : 소프트웨어 인터럽트 (system call)
- I/O 종료 : 하드웨어 인터럽트(device controller)
동기식 입출력과 비동기식 입출력
- 동기식 입출력(Synchronous I/O) : I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
- 비동기식 입출력(Asynchronous I/O) : I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
저장장치 계층 구조
위로 갈 수록 빠름, 단위공간당 가격 비쌈, 용량 적음
휘발성(Volatility)
- 휘발성 매체(디램, 에스램, 레지스터) : 전원 나가면 사라짐
- 비휘발성 매체 : 전원 나가도 사라지지 않음
CPU 접근
- Primary : CPU 접근 (byte단위 접근) 가능
- Secondary : CPU 직접 접근 불가
캐싱(caching)
- 재사용 목적
- 용량이 위로갈수록 작아지기 때문에 모든걸 저장해서 읽어둘 수 없음
[참고]
'Computer Science > OS' 카테고리의 다른 글
[OS] 프로그램 실행 (0) | 2022.02.19 |
---|---|
[OS] 운영체제의 분류 (0) | 2022.02.13 |
[OS] 운영체제란 (0) | 2022.02.12 |
댓글