- 인터럽트
- 인터럽트마다 처리해야될 작업이 커널에 함수로 정의되어있음
- 인터럽트 벡터 : 인터럽트 종류를 식별
- 인터럽트 벡터로 커널의 주소를 식별하여 CPU가 처리해야할 작업을 찾음
- 인터럽트의 종류
- 하드웨어 인터럽트(Interrupt)
device controller와 같은 하드웨어가 발생시킨 인터럽트 - 소프트웨어 인터럽트(Trap)
1) 시스템 콜 : 사용자 프로그램이 운영체제 함수를 호출
2) Exception : 프로그램 오류에 의한 인터럽트 - Timer
프로세스가 할당한 시간만큼 CPU를 사용하면 인터럽트를 보내는 하드웨어
- 하드웨어 인터럽트(Interrupt)
- CPU
- CPU는 매번 PC의 주소 작업만 처리
- mode bit에 따라 0이면 운영체제로 모든 명령어 처리, 1이면 사용자 프로그램으로 제한된 명령어 처리
- 동기식 입출력 (Synchronous I/O)
- Synchronous
- 시간적으로 맞추는 것 - I/O 장치까지 직접가서 결과를 보고 오는 것
- I/O 요청 후 작업이 완료된 후에야 제어가 사용자 프로그램이 다음 일을 진행
- I/O의 결과가 필요한 경우에 사용
- Synchronous
- 비동기식 입출력 (Asynchronous I/O)
- I/O 작업 요청 후 다른 작업을 진행
- I/O 작업의 완료는 인터럽트로 확인
- 보통 write를 비동기식으로 사용 : storage에 write가 되는 결과가 필요 없기 때문
- 항상 그런 것은 아님 (storage에 정말 제대로 write가 되었는지 확인이 필요할 수 있음)
- 비동기식 입출력을 사용하는 이유
- I/O 작업은 시간이 오래걸림
- 프로세스가 I/O를 기다리는 동안 CPU를 점유하는 것은 낭비
- 비동기식 입출력은 I/O가 진행되는 동안 다른 프로세스에게 CPU를 넘김
- + I/O 장치도 한 번에 1가지 일만 진행할 수 있음 (프로세스가 I/O 결과를 기다리기 때문)
- DMA
- 원래 CPU만 메모리에 접근 가능
- 그러나 CPU가 너무 많은 인터럽트를 당함 (키보드를 누를 때마다 인터럽트)
- DMA는 메모리로 접근이 가능한 controller이며, CPU 대신 메모리와 device buffer의 데이터를 복사
- 일정 block마다 복사가 끝나면 CPU에게 인터럽트로 알림
- I/O의 종류
- 메모리만 접근(일반적인 I/O)
- load, store와 같이 메모리에 접근하는 명령어가 있음
- I/O 장치를 접근
- 각 디바이스에 접근하는 명령어가 별개로 있음
- Memory Mapped I/O
- I/O 디바이스에 메모리 주소를 매겨서 메모리에 접근하는 명령어로 접근할 수 있음
- 메모리만 접근(일반적인 I/O)
- 저장장치 계층 구조
- 위로 갈수록 speed가 빨리지고, 가격이 비싸짐
- 초록색 영역이 휘발성
- Primary
- CPU에서 직접 접근할 수 있는 메모리
- Byte 단위로 접근이 가능해야함
- Secondary
- CPU에서 직접 접근이 불가능한 메모리
- 하드 디스크는 sector 단위
- Cache Memory
- CPU가 1클럭당 1개 명령어 처리
- 메인 메모리는 10~100 싸이클 정도 걸림
- 두 속도 차이를 완충하기 위해 사용
- 메인 메모리보다 용량이 작아서 당장 필요한 것만 올림 (재사용 목적)
- 프로그램의 실행
- 프로그램은 보통 실행파일 형태로 파일 시스템에 저장
- 실행 파일을 실행
- Virtual memory 생성 : 프로세스만의 독자적인 공간 (stack, data, code)
- 메모리에 올라와서 프로세스가 됨 (종료시 메모리에서 내려감)
- 메모리에 프로그램 전체가 올라오지 않고 필요한 부분만 올라옴
- 당장 필요하지 않은 부분은 disk의 swap area에 내려놓음
- 물리 메모리에서 Virtual memory로 주소를 변환하는 계층이 필요
- 커널 주소 공간
- Code
- 시스템 콜, 인터럽트 처리 코드
- 자원 관리를 위한 코드
- Data
- 운영체제가 사용하는 자료구조들이 정의됨
- 하드웨어 종류마다 자료구조를 정의
- 각 프로세스를 관리하기위한 자료구조(PBC)
- stack
- 운영체제도 함수 구조로 이루어진 프로그램
- 프로세스들이 커널 코드의 함수를 호출함
- 어떤 프로세스가 함수를 호출했는지 확인하기 위해 사용자마다 스택을 따로 관리
- Code
- 함수
- 사용자 정의 함수
- 내가 정의한 함수
- 프로세스 code 영역에 저장 - 라이브러리 함수
- 가져다 쓴 함수
- 프로세스 code 영역에 저장 - 커널 함수
- 커널 내부의 함수
- 커널 code 영역에 저장 - jump
- 주소의 jump는 virtual memory 안에서만 허용
- 사용자 정의 함수
'CS > 운영체제' 카테고리의 다른 글
[운영체제] KOCW 반효경 교수님 강의 - 6. Process 2 (0) | 2022.03.28 |
---|---|
[운영체제] KOCW 반효경 교수님 강의 - 5. Process 1 (0) | 2022.03.28 |
[운영체제] KOCW 반효경 교수님 강의 - 3. System Structure & Program ExeCution 1 (0) | 2022.03.11 |
[운영체제] KOCW 반효경 교수님 강의 - 2. Introduction to Operating System (0) | 2022.03.11 |
[운영체제] 프로그램이 만들어지고 실행되기까지 (0) | 2021.10.01 |