Chapter 2 운영체제 구조
2.1 운영체제 서비스
운영체제는 프로그램 실행환경을 제공, 프로그램과 그 프로그램의 사용자에게 특정 서비스를 제공한다.
OS Service for user support
User Interface : 사용자 인터페이스 (CLI, GUI, Batch)
Program Execution : 프로그램을 메모리에 적재해 실행할 수 있다. 정상, 비정상 실행 종료 가능
I/O Operation : 실행 중인 프로그램의 입출력 요구, 사용자들은 입출력 장치를 직접 제어할 수 없다.
File-system Manipulation : 권한을 확인하여 파일 read/write/create/delete/search/list 를 수행가능하다.
Communications : 프로세스간 통신, 네트워크간 통신 지원 (Shared Memory, Message Passing)
Error Detection : 모든 가능한 오류에 대해 반응하며 수정해야 한다. (HW Error, SW Error)
OS Service for Efficient Operation
Resource Allocation : 다수의 작업이 동시에 실행될 때, 각각에 자원을 할당해 주어야 한다.
(CPU cycles, Memory, File system)
Logging : 프로그램이 어떤 종류의 자원을 얼마나 사용하는지에 대한 추적이 가능해야한다.
Protection and Security : Protections은 시스템 자원에 대한 모든 접근이 통제되도록 보장한다.
Security는 외부 입출력 장치들을 부적합한 접근 시도로 부터 탐지한다.
2.2 사용자와 운영체제 인터페이스
Command Interpreters(Command-line Interface : CLI)
사용자가 지정한 명령을 가져와서 그것을 수행하는 것.
ex) rm file.txt : rm이라는 파일을 찾아 메모리에 적재하고, 매개변수 file.txt로 수행한다.
Graphical User Interface(GUI)
mouse, folder, icons, touch screen 등으로 이루어진 사용자 인터페이스
CLI에 비해 직관적으로 작동하며, 쉽게 사용가능하게 한다.
2.3 시스템 콜
시스템 콜은 운영체제에 의해 사용 가능하게 된 서비스에 대한 인터페이스를 제공한다.
운영체제 커널은 Function 형식으로 어플리케이션에게 제공된다.(HW Abstraction, SW Abstraction)
어떤 프로그램이든지 리소스가 필요로 할때 시스템콜을 사용해야만 한다.
시스템의 위험성을 감소시키기 위함, OS는 Parameter를 모두 확인한다.
어플리케이션들은 HW 및 Data에 직접 접근을 하지 못한다.
인터럽트(Interrrupt)
Interrupt Type은 Interrupt Number로 정의
OS는 부팅시 Interrupt Descriptor Table (IDT) 설정하여 메모리에 구성
각 Entery 는 Interrupt Handler
시스템콜 호출 순서
1. 커널이 각 system call type을 system call number로 정의
2. 커널이 system call table을 초기화후, system call number(=system call vector)를 매핑
3. User process가 system call number와 arguments를 설정
4. User process가 int X를 실행 (X is 0x80 in linux0)
5. Kernel Mode로 진입후 X를 위한 커널의 인터럽트 호출
6. 커널이 System call number를 사용해 System call table을 검색
7. 해당하는 fucntion이 있다면 호출
8. 커널의 Return (Interrupt return)
Application Programming Interface (API) for System call
대부분의 응용 개발자들은 Application Programming Interface에 따라 프로그램을 설계
API는 각 함수에 전달되어야할 매개변수들과 프로그래머가 기대할 수 있는 반환 값을 명시
System Call을 직접 사용하기 까다롭고, 동일 API 사용 시스템에서 실행 되는 것(이식성) 증가
Windows API for Windows systems
POSIX API for POSIX-Based system (UNIX, Linx, Mac OS X)
Java API for JVM
libc = UNIX, Linux 시스템에서 C 언어로 작성된 프로그램을 위해서 제공되는 라이브러리
매개변수 전달
Block Method : 매개변수를 메모리 내의 블록이나 테이블에 저장, 블록의 주소가 레지스터내에 매개변수로 전달
Stack Method : 매개변수는 프로그램에 의해 Push, 운영체제에 의해 Pop
시스템 콜의 유형(Types of System Calls)
프로세스 제어, 파일 조작, 장치 조작, 정보 유지보수, 통신, 보호 등 여섯가지 범주로 구별
Process Control : fork, exe, exit
File Manipulation : create, open, close, read, write, lseek
Device Manipulation : open, close, read, write, ioctl
Information Maintance : time, date, dump,pid
Communication : open, close, connect, accept, read, write, send, recv, pipe, mmap, sendfile
Protection : chmod, umask, chown
Process Control
프로그램을 Load 및 Execution, 정상적으로 또는 비정상적으로 종료가능 해야한다.
Multi Programming 에서는 프로세스 관리가 필요하다
Error handling : Terminate -> creating a memory dump -> print message -> run next command
DOS 환경
Single-tasking system
Coomand Interpreter가 프로그램을 메모리로 로드
Instruction Pointer를 프로그램의 첫번째 Instruction으로 이동
프로그램이 종료된다면, Command Interpreter를 Reload
UNIX/Linux 환경
사용자의 로그인 및 shell(프로세스) 실행
사용자의 command 입력을 통해 프로세스 실행 요청(ex ls -la *.c)
shell의 fork() 및 exec() 실행
shell은 프로세스가 종료될때까지 wait or background 실행 가능
프로세스가 종료된다면, exit() system call 호출
Communications
Message passing
Exchanging messages를 기초로 한다.
Connection을 먼저 정의하여야 한다. (Sender/Receiver 의 존재 유무 확인)
Shared-memory model
일반적으로는 하나의 프로세스는 다른 프로세스 메모리를 참조하지 못한다.
Share에 필요한 System Call이 반드시 호출
각 프로세스들은 Shared Memory region의 무결성(Integrity)를 항상 확보해야 한다.
File Manipulation
파일 생성, 삭제, 열기, 닫기
읽기, 쓰기, 위치변경,
파일 속성 획득 및 설정
Device Management
장치를 요구, 장치를 방출
읽기, 쓰기, 위치변경
장치 속성 획득, 장치 속성 설정
장치의 논리적 부탁(Attach) 또는 분리(Detach)
Information Maintenance
시간, 날짜의 설정가 획득
시스템 데이터의 설정과 획득
프로세스, 파일, 장치 속성 획득 또는 설정
Protection
권한 설정 및 관리
'책 > 운영체제' 카테고리의 다른 글
운영체제 Ch03_'Process-2' (0) | 2021.01.08 |
---|---|
운영체제 Ch03_'Process-1' (0) | 2021.01.07 |
운영체제 Ch02_'Operating-System Structure-2' (0) | 2021.01.07 |
운영체제 Ch01_'Introduction' (0) | 2020.12.18 |
운영체제 레퍼런스 (0) | 2020.12.18 |