- 커리큘럼이 짬뽕식이긴 한데 하다보니 운영체제를 공부하게 됐다. 프로세스 생명주기나 메모리 관리에 대한 내용을 보다보니 지나칠 수가 없었다. 처음엔 Operating System Concepts 책을 보려고 했으나 시간적인 문제도 있고 개론적으로 내용을 알고 있기 때문에 Operating System Concepts Essentials로 진행하기로 했다.
- 너무 많은 내용을 담지 않겠다.
운영체제가 할 일
- 컴퓨터 시스템은 대게 하드웨어, 운영체제, 응용프로그램, 사용자 네가지 구성요소로 구분할 수 있다.
사용자 관점에서 운영체제가 할 일
- 운영체제는 대부분 사용의 편의성을 위해 설계되고 자원의 이용에 대해서 전혀 신경 쓰지 않도록 설계되어있다.
- 터미널과 컴퓨터, 워크스테이션과 서버, 데스크톱, 스마트폰 등 점차 단말기의 종류가 확대되고 있다.
시스템 관점에서 운영체제가 할 일
- 운영체제는 하드웨어와 가장 밀접하게 연관된 프로그램이다.
- 운영체제를 자원할당자 resource allocator라고 볼 수 있다.
- 자원 : CPU시간, 메모리공간, 파일저장공간, 입출력 장치 등
- 운영체제는 제어 프로그램 control program이다.
- 제어 프로그램은 오류와 컴퓨터의 부적절한 사용을 방지하기 위해 사용자 프로그램의 실행을 제어한다. 특히 운영체제는 사용자 프로그램이 실행하는 입출력장치의 연상과 제어에 깊이 관려한다.
운영체제의 정의
- 운영체제가 존재하는 이유는 쓸모있는 컴퓨터 시스템을 만드는 과정에서 발생하는 문제점을 해결하기 위한 적절한 방법을 제공하기 때문.
- 운영체제는 컴퓨터에서 항상 실행되는 하나의 프로그램으로 일반적으로 커널이라 부른다. 시스템 프로그램은 운영체제와 연관되어 있으나 반드시 커널에 포함 될 필요는 없고, 응용 프로그램은 시스템의 작동과 관계없는 모든 프로그램을 칭한다.
컴퓨터 시스템의 구성
Computer System Operation
- 컴퓨터가 구동을 시작하기 위해서는 초기 프로그램이 있어야한다. bootstrap program은 컴퓨터 내의 EEPROM에 저장되고 Firmware라고 많이 알려져있다. CPU 레지스터를 시작으로 시스템의 모든 측면을 초기화한다. 또한 커널을 적재하고 실행하는 방법을 알아야 한다.
- 커널이 적재되고 실행되면 시스템프로그램이 항상 메모리에 적제되며 이를 시스템 프로세스나 시스템 데몬이라 부른다
- 이 과정이 끝나면 시스템은 이벤트가 발생하기 기다린다.
- 이벤트의 발생 여부는 하드웨어나 소프트웨어로부터 발생한 Interrupt에 의해 전달 받는다.
- 하드웨어는 어느때든지 시스템버스를 통해 CPU에 신호를 보내 인터럽트를 발생시킬 수 있다.
- 소프트웨어는 System call이라 불리는 특별한 연산을 실행해 인터럽트를 발생한다.
- CPU가 인터럽트 되면 CPU는 하던 일을 중단하고 즉시 지정된 위치로 실행 위치를 옮긴다. 이 위치에는 인터럽트를 처리하기로 되어있는 서비스 루틴의 시작주소가 기록되어있다.
- 인터럽트는 적절한 서비스 루틴으로 제어를 전달해야한다. 전달을 처리하는 간단한 방법은 총괄루틴을 호출하여 인터럽트에 관한 정보를 조사하는 방법이다.
Storage Structure
- CPU는 명령어를 오로지 메모리에서만 가져올 수 있으므로 프로그램을 실행하려면 반드시 메모리에 적재되어 있어야한다.
- 모든 형태의 메모리는 바이트의 배열을 제공한다. 바이트는 자신의 주소를 가지고 있다.
- 폰노이만구조 시스템에서 명령-실행 사이클에서 먼저 명령을 인출해 명령 레지스터 에 저장한다
- 메인메모리는 전원이 공급되지 않으면 그 내용이 사라지는 휘발성 저장장치다.
- 그러므로 메인메모리의 확장으로 영구보존 가능한 보조 저장장치를 제공한다.
I/O Structure
- 컴퓨터 시스템은 여러개의 장치 제어기와 CPU들로 구성되며 이들은 공통버스로 연결되어있다. 각 디바이스 컨트롤러가 특정 유형의 장치를 담당한다.
- 디바이스 컨트롤러는 버퍼와 특수목적용 레지스터 집합을 관리한다. 또한 자신이 제어하는 주변 장치와 버퍼 사이의 데이터 전송을 담당한다.
- 운영체제는 각 디바이스 컨트롤러마다 디바이스 드라이버를 가지고 있다.
- 입출력 연산을 위해 디바이스 드라이버는 컨트롤러의 적절한 레지스터에 필요한 값을 적재한다.
- 입력이 완료되면 데이터에 대한 포인터를 같이 반환할 수 있다.
- 이 인터럽트 구동방식은 입출력이 적을때는 문제가 없으나 대략의 데이터를 전송할때는 높은 오버헤드를 초래한다. 그래서 DMA장치가 사용된다. 컨트롤러는 CPU의 개입 없이 메모리로부터 자신의 버퍼로부터 메모리로 데이터 블록 전체를 전송한다.
- 속도가 느린 장치에 한 바이트마다 인터럽트가 발생하는게 아니라 블록단위로 인터럽트가 발생하므로 컨트롤러가 전송작업을 할 때 CPU는 다른 작업을 실행할 수 있다.