거의 모든 운영체제는 사용자 인터페이스(UI)를 제공한다.
CLI : 명령어 라인 인터페이스
GUI : 그래픽 유저 인터페이스
Batch Interface : 일괄처리 인터페이스
시스템은 프로그램을 메모리에 적재해 실행할 수 있어야 한다.
또, 프로그램은 정상적이든 비정상적이든 실행을 끝낼 수 있어야 한다.
수행 중인 프로그램은 입출력을 요구할 수 있다.
보통 이런 입출력 장치는 효율과 보안을 위해 사용자들이 제어할 수 없다. 따라서 운영체제가 입출력 수행의 수단을 제공해야 한다.
파일 시스템은 특히 중요한 분야이다. 프로그램은 파일을 읽고 쓸 필요가 있을 뿐 아니라 생성, 삭제, 검색 등이 필요하다.
게다가 몇몇 프로그램은 특정 파일의 접근을 허용, 거부할 수 있어야 한다.
운영체제는 이런 특성을 제공하기 위하여 다양한 파일 시스템을 제공한다.
한 프로세스가 다른 프로세스와 정보를 교환해야 할 필요가 있는 여러 상황이 있다.
통신은 공유 메모리를 통해서 구현될 수 있고, 메시지 전달(message passing) 기법을 사용하여 구현될 수 있는데, 후자의 경우 정보의 패킷들이 운영체제에 의해 프로세스들 사이를 이동한다.
운영체제는 모든 가능한 오류를 항상 의식하고 있어야 한다.
오류는 CPU, 메모리 하드웨어, 입출력 장치(패리티 오류, 네트워크 접속 실패), 사용자 프로그램(연산 오버플로) 등에서 일어날 수 있다.
운영체제는 이러한 각 오류에 대한 적절한 조치를 취할 수 있어야 한다.
다수의 프로세스나 작업이 동시에 실행될 때, 그들 각각에 자원을 할당해 주어야 한다.
운영체제는 여러 가지 다른 종류의 자원을 관리하는데, 예를 들어 CPU를 최대한 효율적으로 이용하기 위해 운영체제는 CPU 스케줄링 루틴이 CPU의 속도, 반드시 실행해야 할 프로세스들, CPU의 처리 코어의 개수 등의 요인들을 고려하도록 해야 한다.
사용자는 어떤 프로그램이 어떤 종류의 컴퓨터 자원을 얼마나 많이 사용하는 지를 추적할 수 있길 원한다.
윈도우의 경우, (Ctrl + Alt + Del) 키를 누르면 작업 관리자 창이 나오는 데 여기에서 모든 프로그램들의 자원 사용 현황을 볼 수 있다.
Dual-Mode를 통해 OS를 application으로부터 보호한다.
Application이 Operating System에 서비스를 요청할 수 있는 유일한 방법.
프로그램은 시스템 API나 표준 라이브러리 함수를 사용하여 요청.
API나 함수는 궁극적으로 일련의 시스템 호출로 구성.
프로세스 제어 (Prcess Control)
파일 관리 (File Management)
장치 관리 (Device Management)
정보 유지 관리 (Information Maintenance)
통신 (Communications)
과거에는 사실상 계층이 구분되어 있지 않았다. MS-DOS에서는 사용자 프로그램이 입출력 루틴에 접근해 디스플레이와 디스크 드라이브에 직접 쓰기를 할 수 있었다.
따라서 만약 사용자 프로그램에 문제가 생기면 전체 시스템에 문제가 생겼다.
전통적인 UNIX 시스템 구조는 MS-DOS에 비해 기능이 분리되었지만, 여전히 하나의 계층이 너무 많은 일을 했다.
운영체제를 더 세분화해 계층을 분리한 것이 계층적 접근(Layered approach) 방식이다. 가장 아래에 있는 계층(레이어 0)은 하드웨어고, 가장 높은 계층(레이어 N)은 사용자 인터페이스다.
이 방식은 유지보수가 아주 편한데, 하나의 계층에만 신경쓰면 다른 계층에는 아무런 신경을 쓰지 않아도 되기 때문이다.
마이크로커널(Microkernel)은 커널에서 핵심적인 요소만 남긴 가벼운 커널을 말한다.
마이크로커널은 코드 양이 훨씬 적어 컴파일, 테스트 시간이 비교적 짧고, 다른 시스템에 이식(Porting)하기도 쉽다.
보통 통신과 최소한의 메모리 관리 프로세스역할만 수행한다. -> 기능이 간소,최소화 되어 확장성은 높은 구조이지만, 그만큼 시스템 오버헤드가 크다.
모듈은 커널을 확장하기 위한 기술로, OOP에서 말하는 그 모듈화와 같은 개념이다.
프로세스에 실시간으로 모듈을 붙여 작동시킬 수 있고, 각 기능들을 독립적으로 관리할 수 있어 효과적으로 시스템을 유지할 수 있다. 적재가능, Load-able한 구현방법으로, 리눅스,유닉스 등에서 많이 쓰이고 있다.
하나의 하드웨어로 여러 컴퓨터가 동작하는 듯한 환경 제공. 계층적 접근법.
하드웨어를 Configuration해주는 프로그램
부팅 과정을 담고있는 프로그램