주목할 점은 이런 목적을 달성하기 위해 여러 운영체제가 택하는 방법들이 다양하다는 것이다. -> What과 HOW의 분리 - 인터페이스와 구현의 분리처럼 os에서도 관심사의 분리가 이루어져 있다.
os는 기본적으로는 커널을 통해 하드웨어에 대한 서비스를 제공한다.
하지만 이 기능은 critical하기에 보호/관리 되어야 한다 때문에 커널 위에 user모드에서 응용 프로그램들이 수행되어 무분별한 커널로의 접근을 보호하고, 커널은 system call을 통해 user모드에 하드웨어의 통제를 부분적으로 제공한다.
프로그램이 수행할 명령어, 데이터들은 메모리에 저장되기도 하지만,
이 메모리는 모든 데이터들을 저장하기에는 너무 작고, 전원을 끄면 휘발되는 저장장치이다.
때문에 보다 크고 영구적인 저장장치인 자기 디스크, 반도체 디스크, 플래쉬 메모리(주로 핸드폰) 를 이용한다.
대부분의 데이터들은 메모리에 적재되기 전, 이 저장장치에 보존되어 있다.
단일 처리기는 하나의 cpu와 전용 처리기들로 이뤄진다.
전용 처리기는 사용자 프로세스의 명령어를 실행하지는 않지만 디스크,키보드, 그래픽 제어기 같은 그 외 기기들 각각에 처리기로 사용된다. 이 전용 처리기들은 cpu로부터 요청을 받아들여 그 스스로 스케줄링을 하고 os는 이 처리기들의 상태를 감시한다. os가 전용 처리기들과 통신하는게 단일 처리기 시스템의 특징이다.
다중 처리기는 여러 개의 cpu를 이용한다. 이로 인해
비대칭적 다중 처리는 특정 처리기만이 시스템을 제어하는 것이다. 즉 처리기간의 주종관계가 성립해 특정 처리기만이 스케줄링하고 시스템을 접근한다. SMP는 모든 처리기가 동일하게 시스템에 접근한다. 이로 인해 큰 성능 저하 없이 cpu들을 활용할 수 있지만, 한 cpu에 과한 부하가 걸리면 이에 대한 분산이 어려울 수 있다. 이를 일부 데이터는 공유하도록 다른 수준의 캐시 계층화로 해결할 수 있다.
운영체제는 여러 개의 프로그램을 적절하게 수행할 수 있어야 한다.
이를 위한 방안으로는 1. multiProgramming이 있다.
여러 작업들을 디스크의 작업 pool에 적재하고 이 중 일부를 메모리에 적재한다. 어떤 작업에 wait가 발생하면 그 동안 메모리에 있는 다른 작업을 실행해 cpu의 활용률을 높인다.
이와 다른 방안으로 2. multi-tasking이 있다. cpu활용을 시간 단위로 쪼개 할당한다. 이 경우 시간에 따른 적절한 응답을 보장해야 하기에 작업 스케줄링, cpu 스케줄링, 스와핑, 가상 메모리 등의 방법을 이용해 메모리와 cpu를 관리한다.
프로그램의 명령어는 cpu에 의해 실행되어야 의미가 있다. 실제 수행을 위한 cpu시간, 메모리, 파일, 다음에 실행할 명령어의 PC를 가진 스케줄링의 대상을 프로세스라 한다. 이 프로세스는 적절하게 스케줄링/동기화 되어야 하고,여러 IPC방식으로 통신도 가능하며, 병렬 수행 하는 등의 방식으로 프로그램으로 동작한다.