Mode Bit
Mode Bit: 하드웨어적으로 두 가지 operation 지원
- Mode Bit == 1 : 사용자 모드 - 사용자 프로그램 수행
- Mode Bit == 0 : 모니터 모드 (= 커널 모드, 시스템 모드) - OS 코드 수행, System call 수행
- 보안과 관련된 중요한 명령어는 모니터 모드에서만 수행 가능한 특권명령
- Interrupt나 Exception 발생 시 하드웨어가 Mode Bit를 0으로 바꿈
- 사용자 프로그램에게 CPU를 넘기기 전에 Mode Bit를 1로 바꿈
Timer
Timer
- 타이머 시간이 0이 되면 타이머 인터럽트를 발생시켜서 운영체제에 제어권이 넘어가도록 한다.
- CPU를 특정 프로그램이 독점하는 것으로부터 보호
- Time sharing을 구현하거나 현재 시간을 계산할 때 사용
Device Controller(장치 처리기)
I/O Device Controller
- 특정한 I/O Device를 관리하는 일종의 작은 CPU (hardware)
- control register, status register, local buffer를 가진다.
- I/O 작업이 끝나면 하드웨어 인터럽트를 발생시킨다.
Device Driver(장치 구동기)
- 각 I/O Device별 처리 루틴이 담겨있는 OS 코드 (Software)
입출력(I/O)의 수행
- 모든 입출력 명령은 특권 명령
- 사용자 프로그램의 시스템 콜 -> Trap 발생 -> 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동 -> 올바른 I/O 요청인지 확인 후 수행 -> I/O 작업 완료 후 제어권을 시스템콜 다음 명령으로 이동
Interrupt
인터럽트가 발생한 시점의 레지스터와 Program Counter(PC)를 save한 후 CPU 제어를 인터럽트 처리 루틴에 넘긴다.
- Interrupt (하드웨어 인터럽트): 하드웨어가 발생시킨 인터럽트
- Trap (소프트웨어 인터럽트)
- Exception - 프로그램이 오류를 범한 경우
- System call - 프로그램이 커널 함수를 호출하는 경우
- 인터럽트 벡터: 해당 인터럽트의 처리 루틴 주소를 가지고 있음
- 인터럽트 처리 루틴 (Interrupt Service Routine, 인터럽트 핸들러): 해당 인터럽트를 처리하는 커널 함수
- Trap의 예시: 프로세스가 자식 프로세스를 생성할 때 디스크에서 데이터를 읽기 위해 발생한 인터럽트
- 하드웨어 인터럽트가 즉시 발생하는 경우: 프로세스의 CPU 할당 시간이 끝났을 때, 디스크의 파일 읽기 요청에 대한 처리가 완료되었을 때
System Call
System Call: 사용자 프로그램이 커널 함수를 호출하는 것
- Trap 발생 -> Mode Bit = 0 으로 세팅됨
동기식 입출력과 비동기식 입출력
동기식 입출력 (Synchronous I/O)
- 입출력 작업이 완료된 후에 제어가 사용자 프로그램으로 넘어감
비동기식 입출력 (Asynchronous I/O)
- 입출력 작업이 끝나는 것을 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
두 경우 모두 I/O의 완료는 인터럽트로 알려준다.
DMA (Direct Memory Access)
- CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
- block 단위로 인터럽트 발생
- 빠른 입출력 장치를 메모리에 가까운 속도로 독립적으로 처리하기 위해 사용
I/O 입출력 명령어
- I/O를 수행하는 special instruction: I/O 장치마다 특별한 명령어를 사용
- Memory Mapped I/O: 메모리 접근 instruction 사용
- 입출력을 위한 고유한 instruction을 두지 않고 입출력 장치에 메모리 주소를 연장해서 할당한 후 메모리 접근 instruction을 통해 입출력을 수행하는 방법
저장장치 계층 구조
Primary (Executable)
- volatile(= temporary), speed & cost ⬆️, size ⬇️
Register |
Cache Memory |
Main Memory (DRAM) |
Secondary
- non-volatile, speed & cost ⬇️
Magnetic Disk (SSD) |
Optical Disk |
Magnetic Tape |
Caching
- 상대적으로 더 빠른 저장장치에 데이터를 복제해놓고 동일 데이터 재사용 시 빠르게 서비스하는 방법
- 저장장치 계층 간의 속도 차이를 완충하기 위해 사용
프로그램의 실행 (메모리 load)
File System 안에 실행 파일 A가 있을 때,
Virtual Memory 안에 프로세스 A의 address space가 만들어짐 - stack, data, code 정보 저장
- stack: 동적 할당 데이터, local, stack data
- data: static, global 데이터
- code: 컴파일된 코드
Address translation을 통해서 Physical memory 혹은 Swap area에 저장됨
- Swap Area: 메모리를 block 단위로 잘라서 사용하지 않는 메모리는 하드 디스크에 저장해놓았다가 사용할 때 실시간으로 불러옴
Kernel Address Space
- Virtual Memory 사용 X
- Stack: 프로세스 별 커널 스택
- Data: 프로세스 별 PCB (Process Control Block), 시스템 자원 control - CPU, mem, disk
- Code: 시스템콜, 인터럽트 처리 코드, 자원 관리 혹은 편리한 서비스 제공을 위한 코드
사용자 프로그램이 사용하는 함수
함수 (Function)
- 사용자 정의 함수: 자신의 프로그램 안에서 정의한 함수
- 라이브러리 함수: 자신의 프로그램에서 정의하지 않고 가져다 쓴 함수, 프로그램의 실행 파일에 포함되어 있다.
- 커널 함수: 운영 체제 프로그램의 함수, 호출하기 위해서는 시스템 콜을 해야 한다.
사용자 정의 함수와 라이브러리 함수는 해당 프로세스의 Address Space 안의 Code 영역에 저장되어 있고, user-mode(사용자 모드)에서 작동하는 반면, 커널 함수는 Kernel Address Space의 Code 영역에 저장되어 있고 커널 모드에서 작동한다.
'CS > 운영체제' 카테고리의 다른 글
06. Deadlocks (1) | 2023.11.21 |
---|---|
05. Process Synchronization (0) | 2023.11.13 |
[Week4] CPU Scheduling (0) | 2023.11.02 |
Week3: 프로세스(Process) 관리 (1) | 2023.10.28 |
Week 1: 운영체제(Operation System, OS) 개요 (0) | 2023.10.17 |