Mode
| Mode | op-code | Memory | CPU Register |
|---|---|---|---|
| Kernel | Execute any op-code | Access any place | Acess Any Register |
| User | No Privileged op-code | Only my memory area | No Speacial Register |
Dual Mode 필요성
User가 I/O 등에 Direct로 접근하지 못하게 막기 위해서
Mode Switch 발생하는 상황
- Interrupt
- Exception
- System Call
CPU Protection
목적
CPU를 독점하는 것을 방지하기 위함
=> User Program을 실행하는데 아무 Interrupt나 System Call이 없다면 소유권이 OS에게 돌아가지 않고
계속해서 UserProgram만 실행되는 등의 문제가 생길 것
=> System Timer가 필요함
System Timer
특정 시간마다 Interrupt를 발생시키는 것
일단 Interrupt가 발생하면 Control이 OS로 넘어감
오직 OS만 load 할 수 있음
Absolute Time & Relative Time
Absolute Time
정확한 날짜
Relative Time
오늘부터 이틀 뒤 같은 상대적인 날짜
OS에선 Relative Time이 중요하게 사용됨 (System Timer 사용 등)
Memory Protection
Memory Management Unit
논리적 Memory 주소를 물리적 Memory 주소로 변환
동시에 Memory Protection, Cache Control 등 관리
=> HW로 구축됨
I/O Protection
Privileged I/O Instructions
모든 I/O Instructions는 Privileged Instructions
User는 I/O에 Direct Access 불가
반드시 OS procedure를 호출해서 접근 가능
System Call을 통해 User-mode의 Program이 Kernel-mode의 Service를 호출
System Call
Process가 Kernel Service를 요청하는 수단
Application이 OS와 Communication 하기 위한 방법
호출 목적
- System Resource 보호
- 신뢰성 무한 루프 돌 때 중단 함수 호출 등
- 보안 권한 없이 OS나 다른 Resource 접근
System Call 대신 API를 사용하는 이유
- OS에게 약간의 유연성 제공
- System Call보다 API가 사용하기 쉬움
- OS마다 System Call이 다르기 때문에 일관적인 기능을 제공하는 API 사용
System Call 호출 과정
- Library에서 System Call 함수 호출
- EAX 레지스터에서 System Call 번호 가져감
- PC에 System Call 주소 넘김
- Kernel 들어가서 넘겨받은 정보를 바탕으로 System Call Table 호출
System Call Parameter 전달 방법
레지스터
레지스터 안에 파라미터를 넘김
Memory 블럭
메모리 블럭 안에 파라미터를 저장하고 block의 시작 주소를 넘김
스택
파라미터를 Stack에 push하고 OS에 의해 Stack에서 Pop함
Block과 Stack 방식은 파라미터의 길이, 갯수 제한이 없음