Memory
CPU의 작업공간.
매 클럭 사이클마다 기계어를 읽어서 인식을 하게된다.
I/O 작업을 할 때는 CPU를 OS에게 넘겨준다.
I/O Device
device controller: 작은 CPU 역할
local buffer: 디바이스의 작업공간
interrupt line: I/O device의 요청을 전달 받는 곳
mode bit: 지금 실행되는 것이 운영체제인지 사용자 프로그램인지 구분
registers: 메모리보다 더 빠르고 정보를 저장하는 곳
Timer
하드웨어. 특정 프로그램이 CPU를 독점하지 못하도록 막음.
보통 1초보다 짧은 시간으로 설정되어 있음.
Mode bit
사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치.
사용자 모드: 1. 사용자 프로그램 수행
모니터 모드 (커널모드, 시스템 모드): 0. OS 코드 수행
interrupt나 exception 발생 시 하드웨어가 mode bit을 0으로 바꿈
사용자 프로그램에게 CPU를 넘기기 전에 1로 세팅
DMA (Direct Memory Access)
CPU말고 DMA도 메모리에 접근할 수 있음.
I/O가 너무 자주 입출력 할 때 CPU가 방해를 받음. I/O의 로컬 버퍼까지 작업이 끝나면 내용을 메모리에 복사하는 역할 까지 해줌.
바이트 단위가 아니라 블럭 단위로 인터럽트를 발생시킴
Memory Controller
CPU와 DMA Controller 사이를 교통정리함.
입출력(I/O)의 수행
모든 I/O 명령은 특권 명령.
사용자 프로그램은 어떻게 I/O를 하는가?
1. 시스템콜 (사용자 프로그램이 OS의 함수를 호출)
- I/O를 하기위해 운영 체제의 메모리로 점프해야 함.
- 근데 mode bit이 1로 되어 있어 접근 불가능
- 사용자 프로그램이 interrupt line을 세팅하는 것을 실행
- CPU는 interrupt가 들어왔기 때문에 mode bit을 0으로 바꾸고 OS에게 운영권이 넘어감
2. OS는 올바른 요청인지 확인 후 수행
인터럽트
Interrupt: 하드웨어 인터럽트. 하드웨어가 발생시킨 인터럽트
Trap: 소프트웨어 인터럽트
- Exception: 프로그램이 오류를 범한 경우
- System Call: 프로그램이 커널 함수를 호출하는 경우
현대의 운영체제는 인터럽트에 의해 구동됨.
인터럽트 벡터: 해당 인터럽트의 처리 루틴 주소를 가지고 있음
인터럽트 처리 루틴 ( = 인터럽트 핸들러): 해당 인터럽트를 처리하는 커널 함수
동기식 입출력과 비동기식 입출력
동기식 입출력 ( synchronous I/O)
I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
구현 방법:
1) I/O가 끝날때까지 CPU를 낭비시킴. 매 시점 하나의 I/O만 일어남
2) I/O가 완료 될 때까지 다른 프로그램에 CPU를 넘겨줌
비동기식 입출력 (asynchronous I/O)
I/O 요청 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
ex) write 작업
두 경우 모두 인터럽트로 완료를 알림.
I/O를 수행하는 두 가지 방법
1. I/O를 수행하는 special instruction에 의해
2. Memory Mapped I/O에 의해
프로그램의 실행 (Memory Load)
프로그램은 file system에 파일 형태로 저장되어 있음
실행 파일을 실행시키면 메모리로 올라가서 프로세스가 됨
중간에 virtual memory라고 한 단계를 더 거치게 됨
1. 어떤 프로그램을 실행 시킴
2. 그 프로그램의 address space가 형성이 됨
ex) stack - data를 쌓아두는 곳
data - 변수, 프로그램이 사용하는 자료구조
code - 기계어 코드
3. kernel은 부팅 시 메모리에 상주하게 됨
커널 주소 공간의 내용
code: 커널 코드.
시스템콜, 인터럽트 처리코드
자원 관리를 위한 코드
편리한 서비스 제공을 위한 코드
PCB: 프로그램이 하나 돌아가면 그 프로그램을 관리하기 위한 자료구조가 커널에 하나씩 만들어 짐
사용자 프로그램이 사용하는 함수
사용자 정의 함수: 자신의 프로그램에서 정의한 함수
라이브러리 함수: 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수. 자신의 프로그램 실행 파일에 포함되어 있음
커널 함수: 운영체제 프로그램의 함수. 커널 함수의 호출 = 시스템 콜
'운영체제 정리' 카테고리의 다른 글
쉽게 배우는 운영체제 챕터별 연습문제 및 심화문제 정리 [PART 3, PART 4] (0) | 2021.01.14 |
---|---|
쉽게 배우는 운영체제 챕터별 연습문제 및 심화문제 정리 [PART 1, PART 2] (0) | 2021.01.11 |
이화여대 운영체제 수업 3 - 2강(프로세스) 정리 (0) | 2019.11.29 |
이화여대 운영체제 수업 3 - 1강(프로세스) 정리 (0) | 2019.11.27 |
이화여대 운영체제 수업 1 강(개론) 정리 (0) | 2019.11.23 |