Operating System Service
운영체제는 사용자에게 다음과 같은 서비스를 제공한다.
- 유저 인터페이스
- Command Line Interface(CLI), Graphics User Interface(GUI)
- 프로그램 실행
- I/O 작동
- 키보드/마우스로부터 입력을 받아 모니터/프린터로 출력을 함.
- 파일 시스템 관리
- 파일과 디렉토리를 읽고/쓰고/생성하고/삭제하고/검색함.
- 커뮤니케이션
- 에러 탐지
효율적인 시스템 작동을 위한 운영체제의 기능들
- 자원 할당
- 여러 유저나 멀티 테스킹
- cpu 사이클, 메모리, 저장 장치, 입출력 장치
- 계산
- 어떤 유저가 어느 만큼 어느 종류의 자원을 사용하는지
- 보호와 보안
- 시스템 자원으로의 접근을 컨트롤
- 유저 허가
- 부적절한 접근시도로부터 방어
Operating System User Interface
- Command Line Interface(CLI)
- 키보드 기반의 인터페이스
- 쉘
- 명령어 실행
- 유저가 명령어를 외워야함.
- Graphic User Interface(GUI)
-
마우스 기반의 인터페이스
-
유저친화적인 인터페이스를 제공
- 윈도우, 메뉴 시스템
- 아이콘이 파일, 프로그램 등을 제공
- CLI VS GUI
- 개인의 선호에 따라 선택
- 현대의 운영체제는 둘다 제공
System Calls
시스템 콜
- 운영체제가 제공하는 인터페이스
- 어떻게 프로그램이 운영체제로부터 서비스를 요구하는지
- 프로세스와 운영체제간에 필수적인 인터페이스를 제공

API
Application Program Interface(API)
- 응용 프로그래머가 사용할 수 있는 일련의 기능
- 가장 흔한 API
- Win32 API for Windows
- POSIX API for POSIX-based systems(유닉스, 리눅스)
- Java API for the Java virtual machine
- 왜 시스템 콜보다 API를 사용하는가?
- 프로그래머는 시스템 콜 실행을 알 필요가 없다.
- 단지 API를 따르고, 운영체제가 하는 일을 이해하면 된다.
- 운영체제의 디테일은 API에 의해 프로그래머에게서 숨겨져있다.
System call handling 시스템 콜 처리

유저가 해당 함수를 호출하면,
라이브러리에서 시스템 콜의 주소를 파악하고,
시스템 콜을 수행하고 다시 돌아온다.
System Call Parameter Passing
- 때때로 시스템콜 식별자보다 많은 정보가 요구될 수 있다.
- 운영체제에서 사용하는 3가지의 방법
- 매개변수를 리지스터로 전달
- 매개변수를 메모리에 있는 테이블에 저장, 테이블의 주소를 리지스터에 전달
- 매개변수를 프로그램에 있는 스택에 저장, 운영체제에 의해 pop off
Types of System calls
- 프로세스 관리
- 생성/종료, 로드/실행, wait/signal event
- 파일 관리
- 메모리 관리
- 정보 유지
- get/set timer or date, get/set process, file or device attributes
- 커뮤니케이션
Operating System Design and Implementation
운영체제 디자인과 실행
- 디자인 목표
-
하드웨어와 시스템 타입의 선택
- batch, time sharing, single/multi user, real-time
-
요구사항
- 유저 입장 -> 사용하기 쉽게, 신뢰성, 안전하고 빠르게
- 시스템 입장 -> 디자인하기 쉽게, 실행 및 유지 쉽게
- 정책을 매커니즘으로 부터 분리
- 매커니즘: 어떻게 어떤 것을 할 것인가?
- 정책: 무엇을 할 것인가?
- 실행
-
과거에는 어셈블리어로 작성
-
현재는 고급 언어로 작성됨. C, C++
- 리눅스, 윈도우
- 느려진 속도, 큰 저장 장치
- 읽기 쉽고, 이식성이 높음
-
운영체제의 수행
Operating System Structures
- 심플한 구조
- 인터페이스와 기능성의 단계가 잘 구분되어있다.
- 어플리케이션이 입출력 루틴에 직접 접근할 수 있다.
- 어플리케이션에 오류가 나면 전체 시스템이 붕괴된다.
- MS-DOS, early UNIX

- 계층 구조
- 운영체제는 층으로 나뉘어 있다.
- 바닥 층(layer 0)이 하드웨어
- 가장 높은 층(layer N-1)이 유저 인터페이스
- 디버그하기 쉽지만, 층을 정의하는 것이 어렵고 효율적이지 않다.

- 마이크로커널 구조
- 커널에서부터 유저 공간까지 움직인다.
- 확장이 쉽고, 이식이 쉽다.
- 안정적이고 보안이 좋다.
- 수행 능력이 떨어진다. ->유저 모듈과 커널이 자주 커뮤니케이션을 하기 때문

- 모듈 구조
- 현대의 운영체제 시스템은 커널을 모듈처럼 실행한다.
- 객체 지향의 접근을 사용
- 각각의 코어 요소들은 구분되어 있다.
- 각각은 알려진 인터페이스를 통해 정보를 나눈다.
- 각각은 필요할때 커널로부터 불러온다.
- Solaris, Linux, Mac OS X
System Boot
커널을 어떻게 로드하는가?
- 부트로더
- 진단을 하고, 시스템을 시작한다.
- 커널을 위치시키고, 메모리에 불러오고 시작한다.
- 작은 시스템의 경우
- 부트로더와 운영체제를 ROM에 저장한다.
- 큰 시스템의 경우
- 부트로더를 ROM에 운영체제를 디스크에 저장한다.