728x90
반응형
SMALL
본 포스팅은 이화여자대학교의 반효경 교수님의 강의를 듣고 정리하였습니다.
http://www.kocw.net/home/search/kemView.do?kemId=1046323
[컴퓨터 시스템의 구조]
- 크게 컴퓨터 내부와 외부로 이루어짐
- 입출력 디바이스는 다음 그림 외에도 더 있음에 주의
- CPU : 매 클럭마다 메모리의 instruction(기계어)을 하나씩 읽어서 실행
- registers : CPU에 존재하는 읽어서 저장할 수 있는 작은 공간, 메모리 주소를 저장
- mode bit : 현재 실행하고 있는 프로그램이 운영체제인지 사용자 프로그램인지 구별
(1: 사용자모드, 0:모니터모드[= 커널모드, 시스템모드])- 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능
- interrupt나 exception 발생 시 하드웨어는 mode bit을 0으로 바꿈
- 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 setting
- 사용자 모드일 경우 한정된 기계어만 실행 가능
- I/O 디바이스 처리는 모니터 모드일 경우에만 가능
- interrupt line : 현재 실행하고 있는 instruction과 I/O 디바이스에 전달되는 요청을 정리
* 명령어 중 파일 읽기 발생 → CPU가 디스크에 명령 전달 → 디스크는 명령 수행 후 자신의 local buffer에 저장[그 동안 CPU는 다른 일을 수행] → 디스크 수행이 끝난 후 CPU의 interrupt line에 전달 → interrupt가 들어오면 수행하고 있던 프로그램 정지 → 전달받은 내용을 운영체제가 판단 후 필요한 프로그램 buffer에 copy → 운영체제는 수행하고 있던 프로그램에게 CPU 전달 → 수행하고 있던 프로그램이 끝나면 전달받은 내용을 기반으로 기존 명령어 수행
* CPU는 하나의 활동이 끝날때마다 interrupt line Check
* 인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음
* 인터럽트 처리 루틴(interrupt service routine, 인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수 - timer
- 특정 프로그램이 CPU를 독점하는 것을 막기 위해 존재
- 운영체제는 특정 프로그램에게 CPU를 넘겨줄 때 timer에 일정한 시간을 설정한 후 넘겨줌
- time sharing을 구현하기 위해 널리 이용됨
- 현재 시간을 계산하기 위해서도 사용
- Device controller
- 해당 I/O 장치유형을 리하는 일종의 작은 CPU
- 제어 정보를 위해 control register, status register, local buffer(=data register)를 가짐
- I/O는 실제 device와 local buffer 사이에서 일어남
- Device controller는 I/O가 끝났을 경우 INTERRUPT로 CPU에 그 사실을 알림
- device driver(장치 구동기, software) ≠ device controller(장치제어기, hardware)
- 입출력 (I/O)의 수행
- 모든 입출력 명령은 특권 명령
- 사용자 프로그램은 어떻게 I/O를 하는가?
- 시스템콜(system call) : 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
- trap을 사용하여 인터럽트 벡터의 특정 위치로 이동
- 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
- 올바른 I/O 요청인지 확인 후 I/O 수행
- I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김
- 인터럽트(Interrupt)
- 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘김
- 넓은 의미의 인터럽트
- Interrupt(하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
- Trap(소프트웨어 인터럽트)
: Exception(프로그램이 오류를 범한 경우), System call(프로그램이 커널 함수를 호출한 경우)
[동기식 입출력과 비동기식 입출력]
동기식 입출력(synchronous I/O) * 헷갈릴때는 립싱크를 생각하자!
- I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
- 구현 방법 1 - CPU를 가지고 기다리고 있음
- I/O가 끝날 때까지 CPU를 낭비시킴
- 매 시점 하나의 I/O만 일어날 수 있음
- 구현 방법2 - CPU를 가지고 있지 않음/일반적인 동기식 입출력 방법
- I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
- I/O처리를 기다리는 줄에 그 프로그램을 줄 세움
- 다른 프로그램에게 CPU를 줌
비동기식 입출력(asynchronous I/O)
- I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
- ex : write작업
** 두 경우 모두 I/O의 완료는 인터럽트로 알려줌
[입출력의 결과를 기다리면 동기식, 기다리지 않고 다른 instruction을 실행하면 비동기식!]
DMA(Direct Memory Access)
- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
- CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
- 바이트 단위가 아닌 block 단위로 인터럽트를 발생시킴
서로 다른 입출력 명령어
- I/O를 수행하는 special instruction에 의해(일반적인 방법)
- 메모리주소와 디바이스 주소는 분리되어 관리
- Memory-Mapped I/O에 의해
- 각 deivce에도 메모리 주소를 부여해서 device 접근 시 메모리 주소로 접근
저장장치 계층구조
- 위로 올라갈수록 처리 속도가 빠르고, 단위 공간당 가격이 비싸기 때문에 용량이 적으며 Primary는 휘발성이 있고 Secondary는 비휘발성이다.
- CPU에서 직접 접근할 수 있는 구조 → primary, 즉 byte 단위로 접근이 가능
프로그램의 실행
- 메모리 Load
- 프로그램 실행 시 가상 메모리 공간에 메모리 주소 공간 생성 → 필요한 부분만 물리적 메모리로 옮김
- data : 프로그램이 사용하는 자료구조, code : 기계어코드, stack : 데이터를 보관하는 곳
커널 주소 공간의 내용
사용자 프로그램이 사용하는 함수
- 사용자 정의 함수
- 자신의 프로그램에서 정의한 함수
- 라이브러리 함수
- 자신의 프로그램에서 정의하지 않고 가져다 쓴 함수
- 자신의 프로그램의 실행 파일에 포함되어 있음
- 커널 함수
- 운영체제 프로그램의 함수
- 커널 함수의 호출 = 시스템 콜
728x90
반응형
LIST
'정리 > 운영체제(Operating System)' 카테고리의 다른 글
6. Process Synchronization (0) | 2022.09.01 |
---|---|
5. CPU Scheduling (0) | 2022.08.17 |
4. Process Management (0) | 2022.08.08 |
3. Process (0) | 2022.06.17 |
1. Introduction to Operating Systems (0) | 2022.05.25 |