운영체제는 시스템 백그라운드 소프트웨어로, 주요한 목적은 컴퓨터의 자원을 관리하는 것이다. 이 자원은 물리적 자원(하드웨어)와 가상자료(데이터)를 의미한다.
초기의 컴퓨터는 어플리케이션을 수동으로 불러와야 했으며, 유저가 모든 하드웨어를 이해하고 짜고 프로그래밍을 했어야 했다. 근본적으로 프로그렘에 하드웨어 인터페이스를 얹음으로써 더 이상 밑단의 일들을 다 알지 않아도 시스템을 설계할 수 있게 되었다.
유저 인터페이스
-> 유저와 컴퓨터간의 상호작용
-> (GUI = 그래픽으로 화면 구성, CLI = 문자로 화면 구성)
파일 관리
-> 파일과 파일경로 구성
-> 파일명변경, 파일정렬, 파일삭제, 파일이동, 파일복사
-> look up table
하드웨어와 주변기기 관리
-> 컴퓨터와 연결된 기기 작동
-> driver
프로세스 관리
-> CPU, RAM 관리
-> 프로세스의 time sharing
소프트웨어 실행
-> OS상의 프로그램 실행
인터럽트 & 에러 처리
멀티 태스킹
프로세스로부터의 인터럽트, 프로세스 요청 관리
보안
-> 사용자 관리
-> 접근 권한
-> 보안 프로그램
메모리 관리
-> 메모리 할당
-> 메모리 추적
네트워크 통신
-> 네트워크 연결
컴퓨터가 작동하면 유저 레벨의 프로세스 혹은 OS의 커널이 실행된다. 응용프로그램은 cpu를 사용자 모드(user mode)로 작동시키며, 반면에 커널은 cpu를 관리자 모드(supervisory mode)로 작동시킨다. 사용자 모드에서는 cpu가 접근할 수 있는 메모리와 실행할 수 있는 명령이 제한된다. 관리자 모드에서는 그런 제한이 없다.
응용 프로그램에서 OS로 보내는 하드웨어 관련 작업 요청. system call은 소프트웨어의 어셈블리어 명령으로 시작된다. OS 커널에 배열의 index를 의미하는 숫자와 요청된 작업을 가르키는 포인터로 이루어져 있다.
context는 CPU의 실행 흐름을 의미한다. context switch는 현재 cpu 사용에 대한 사용자 모드와 관리자 모드 간의 변환, 즉 유저 프로세스에서 OS kernal로의 변환 혹은 유저 프로세스 또 다른 유저 프로세스로의 변환을 의미한다.
인터럽트는 외부에서 CPU로 보내지는 신호이다. 보통 I/O 디바이스에서 보내지며, CPU에게 현재 작업을 멈추고 적절한 OS의 다른 명령을 실행하라는 신호이다. 이를 통해 cpu가 점유되어 있어도 높은 Priority의 작업을 바로 실행 시켜 컴퓨터를 효과적으로 제어할 수 있다.
커널 자체는 다른 인터럽트를 받을 수도 있지만, interrupt handler는 인터럽트를 받아서는 안된다. interrupt context는 일반적으로 OS의 thread가 아닌 CPU의 interrupt 처리과정의 일부이기 때문이다.