시스템 구조
운영체제 서비스
운영체제는 프로그램의 실행 환경을 제공한다.
운영체제가 사용자에게 제공하는 서비스의 종류
- 사용자 인터페이스(User Interface)
- Command Line Interface(CLI)
- Graphical User Interface(GUI)
- Batch Interface(BI)
- 명령어와 명령어를 제어하는 디렉티브가 파일형태로 입력되어 그 파일이 실행되는 구조
- 프로그램 수행(Program Execution)
- OS는 프로그램을 메모리에 적재하여 실행할 수 있어야 함
- OS는 프로그램을 정상적이든 비정상적이든 실행을 끝낼수 있어야 함
- 입출력 연산(I/O Operations)
- OS는 수행중인 프로그램에게 파일, 다양한 입출력 장치등과 연관된 입출력을 요구할 수 있음
- 파일 시스템 조작(File System Manipulation)
- OS는 프로그램에게 파일을 생성하고 삭제할 수 있고 지정된 파일을 찾을수 있어야 하며 파일의 정보를 얻을 수 있어야 함
- OS는 프로그램에게 파일 소유권에 기반을 둔 권한 관리를 이용하여 파일이나 디렉토리의 접근을 허가하거나 거부할 수 있어야 함
- 통신(Communication)
- OS는 한 프로세스가 다른 프로세스와 정보를 교환할 수 있도록 환경을 제공하여야 함
- 공유메모리(Shared Memory) 통해 프로세스간 통신
- 메시지 전달(Message Passing) 은 정보의 패킷들이 OS에 의해 프로세스 사이를 이동
EX) pipe, queue, socket
- OS는 한 프로세스가 다른 프로세스와 정보를 교환할 수 있도록 환경을 제공하여야 함
- 오류 탐지(Error Detection)
- OS는 모든 가능한 오류를 항상 의식하고 있어야 함
- 오류는 CPU, 메모리 하드웨어, 입출력 장치 또는 사용자 프로그램에서 일어날 수 있음
- OS는 모든 가능한 오류를 항상 의식하고 있어야 함
운영체제 서비스의 관점 |
컴퓨터 시스템의 동작을 위한 운영체제의 기능
- 자원 할당(Resource Allocation)
- 다수의 사용자나 다수의 작업들이 동시에 실행될 때, 그들 각각에게 자원을 할당해 주어야 함
- 회계(Accounting)
- OS는 사용자가 어떤 종류의 컴퓨터 자원을 얼마나 사용하고 있는지 추적할 수 있어야 함
- 보호와 보안(Protection and Security)
- OS는 시스템 자원에 대하여 모든 접근이 통제 될수 있도록 보장하여야 함
- OS는 외부로부터 시스템이 보호디고 보안이 유지되도록 하여야 함
시스템 콜 (System Call)
시스템 콜(System Call) 은 OS에 의해 사용 가능하게 된 서비스에 대한 인터페이스를 제공한다. 또한 일반 프로세스와 OS가 통신하기 위한 유일한 방법이다.
시스템콜의 사용예 |
각 시스템 콜에는 번호가 할당되고 시스템 콜 인터페이스는 이 번호에 따라 색인되는 테이블을 유지한다. 시스템 콜 인터페이스는 의도하는 시스템 콜을 부르고 시스템 콜의 상태와 반환 값을 리턴한다.
open() 시스템콜을 호출한 사용자 프로그램의 처리 |
테이블로 매개변수 전달 |
OS에 매개변수를 전달하기 위해 세가지 일반적인 방법을 사용한다.
- 매개변수를 레지스터에 전달
- 매개변수는 메모리 내의 블록이나 테이블에 저장하고, 블록의 주소가 레지스터 내에 매개변수로 전달
- Block Method
- 매개변수는 프로그램에 의해 스택(Stack) 에 넣어질(Push) 수 있고, OS에 의해 꺼내진다(Pop).
- Stack Method
시스템 콜의 유형
시스템 콜은 크게 다섯가지로 분류 될 수 있다.
- 프로세스 제어 (Process Control)
- 끝내기(end), 중지(abort)
- 적재(load), 수행(execute)
- 생성(create), 종료(terminate)
- 프로세스 속성(attributes) 획득, 프로세스 속성(attributes) 설정
- 시간을 기다림
- 사건을 기다림(wait event), 사건을 알림(signal event)
- 메모리 할당 및 자유화
- 파일 조작 (File Manipulate)
- 생성(create), 삭제(delete)
- 열기(open), 닫기(close)
- 읽기(read), 쓰기(write), 위치 변경(reposition)
- 파일 속성 획득 및 설정
- 장치 관리 (Device Management)
- 장치 요구(request), 장치 방출(release)
- 읽기(read), 쓰기(write), 위치 변경(reposition)
- 장치 속성 획득 및 설정
- 장치의 논리적 부착(attach) 및 분리(detach)
- 정보 유지 (Information Maintenance)
- 시간과 날짜의 설정과 획득
- 시스템 데이터의 설정과 획득
- 프로세스, 파일, 장치 속성의 획득 및 설정
- 통신 (Communication)
- 통신 연결의 생성, 제거
- 메시지의 송신, 수신
- 상태 정보 전달
- 원격 장치의 부착(attach) 및 분리(detach)
Windows와 UNIX 시스템 콜의 예 |
표준 C 라이브러리의 예 |
멀티 프로그램을 수행하는 FreeBSD |
운영체제 설계 및 구현
설계 목표
OS를 설계하기 이전에, 시스템의 목표, 명세, 요구사항들을 근본적으로 사용자의 목적과 시스템 목적 두가지로 기본 그룹으로 나눈다.
사용자들이 시스템에 대하여 기대하는 특징은 대게 사용하기 쉽고, 배우기 쉽고, 믿을 수 있고, 안전하고, 신속해야 한다는 점이다. 이에 유사하게 시스템을 설계, 생성, 유지, 조작해야 하는 사람들에게도 비슷하게 정의될 수 있는데, OS는 설계, 구현, 유지 보수가 쉬워야 하며 또한 적응성, 신뢰성, 무오류, 효율성을 가져야 한다는 점이다.
기법과 정책
한가지 중요한 원칙은 기법(Mechanism) 으로부터 정책 을 분리하는 것이다. 기법은 어떤 일을 어떻게 할 것인가를 결정하는 것이고, 정책은 무엇 을 할 것인가를 결정하는 것이다.
운영체제 구조
일반적인 접근 방법은 한 개의 일관된 시스템 보다는 태스크를 작은 구성요소로 분할하는 것이다.
간단한 구조(Simple Structure)
MS-DOS의 계층 구조 |
전통적인 UNIX 시스템의 구조 |
계층적 접근(Layered Approach)
시스템은 다양한 방식으로 모듈화 될 수 있다. OS를 여러개의 계층으로 나누어 구별하는 방식.
계층구조의 운영체제 |
각 층은 자신보다 하위 수준의 층에 의해 제공된 연산만 사용해 구현한다.
계층적 접근 방법의 가장 어려운 점은 여러 층을 적절히 정의하는 것이다.
마이크로커널(Microkernels)
모든 중요하지 않은 구성 요소를 커널로부터 제거하고, 그들을 시스템 및 사용자 수준의 프로그램으로 구현하여 OS를 구성하는 방법
일반적인 마이크로 커널의 구조 |
마이크로커널의 단점중 하나는 가중된 시스템 기능 오버헤드 때문에 성능이 나빠진다는 점이다.
모듈(Modules)
OS 설계하는데 이용되는 최근 기술에는 적재가능한 커널 모듈(Loadable Kernel Modules) 기법이다. 커널은 핵심적인 구성요소의 집합을 가지고 있고 부팅 때 또는 실행 중에 부가적인 서비스들을 모듈을 통래 링크한다.
커널의 각 부분이 정의되고 보호된 인터페이스를 가진다는 점에서 계층구조와 닮았지만, 모듈에서 임의의 다른 모듈을 호출할 수 있다는 점에서 보다 유연하다.
Solaris 적재가능 모듈 |