- 사용자의 입장이 아닌 개발자의 입장으로 운영체제라는 과목을 배울 수 있도록 한다.
- 운영체제의 서비스
- 사용자 인터페이스(User interface) : 운영체제가 동작한 결과를 사용자 또는 프로그램에게 제공하는 경우
- 명령어 라인 인터페이스(command-line interface, CLI) - 리눅스 등의 커멘드 창
- 그래피컬 사용자 인터페이스(grapical user interface, GUI) - 마우스나 키보드 등으로 입력하는 것
- 터치 스크린(touch-screen) - 스마트폰
- 배치 인터페이스(Batch interface) - 명령어와 명령어를 제어하는 디렉티브(directive)가 파일 형태로 입력되고 그 파일이 실행되는 인터페이스
- 프로그램 수행(Program execution) : 시스템은 프로그램을 메모리에 적재해 실행할 수 있어야 한다. 프로그램은 정상적이든 혹은 비정상적이든 실행을 끝낼 수 있어야 한다.
- 입출력 연산(I/O operation) : 수행 중인 프로그램은 입출력을 요구할 수 있다. 이러한 입출력에는 파일 혹은, 입출력 장치가 연관될 수 있다. 효율과 보호를 위해, 사용자들은 입출력 장치를 제어할 수 없다. 따라서 운영체제가 입출력 수행의 수단을 제공해야 한다.
- 파일 시스템 조작(File system manipulation) : 프로그램은 파일을 읽고 쓸 필요가 있다.
- 프로그램은 이름에 의해 파일을 생성하고 삭제 할 수 있다.
- 지정된 파일을 찾을 수 있어야 한다.
- 파일의 정보를 열거할 수 있어야 한다.
- 몇몇 프로그램은 파일 소유권에 기반을 둔 권한 관리를 이용하여 파일이나 디렉터리의 접근을 허가하거나 거부할 수 있게 한다.
- 통신(Communication) : 컴퓨터간 네트워크로 데이터를 주고받는 것 뿐만아니라 한 컴퓨터 내 프로세스들끼리도 정보를 주고 받을 수 있어야한다. -> 공유 메모리를 통해서 구현될 수도 있고, 메시지 전달(message passing) 기법에 의해 구현될 수 있는데, 후자의 경우 정보의 패킷들이 운영체제에 의해 프로세스들 사이를 이동한다.
- 오류 탐지(Error detection) : 운영체제는 모든 가능한 오류를 항상 의식하고 있어야 한다. 아래에 오류가 발생 할 수 있는 환경을 열거해 놓았다.
- CPU
- 메모리 하드웨어(메모리 오류, 정전 등)
- 입출력 장치(테이프의 패리티 오류, 네트워크의 접속 실패, 프린터의 종이 부족)
- 사용자 프로그램(연산의 오버플로, 불법적인 메모리 위치에의 접근 시도, CPU 시간의 지나친 사용 등)
- 자원 할당(Resource allocation) : 다수의 사용자나 다수의 작업들이 동시에 실행될 때, 그들 각각에 자원을 할당해 주어야 한다. CPU를 최대한 효율적으로 이용하기 위해 운영체제는 CPU 스케줄링 루틴이 CPU의 속도, 반드시 실행해야 할 작업들, 사용 가능한 레지스터의 수와 다른 요인들을 고려하도록 해야 한다.
- 회계(Accounting) : 사용자가 어떤 종류의 컴퓨터 자원을 얼마나 많이 사용하는지를 추적할 수 있기를 원한다.
- 보호(Protection)와 보안(security) : 컴퓨터 시스템에 저장된 정보의 소유자는 그 정보의 사용을 통제하길 원한다.
- 위의 서비스들을 사용자나 프로그램에게 제공해야하는 것을 포함하고 있다.
- 운영체제 서비스를 바라보는 관점

- 하드웨어와 사용자 프로그램은 운영체제로 간접적인 연결이 되어있다.
- CLI - 커멘드 명령 창, 입력할 수 있는 위치가 나오고 명령을 입력하면 결과를 줌.
- 구성을 갖춘 명령을 입력하면 해석을 해주는 명령 해석기의 형태로 제공되기도 한다.
- 커널 내에 있는 명령(내부 명령)들이 존재, 외부 명령 또한 커널 바깥에 존재한다.
- 이러한 인터페이스를 묶어서 shell이라고 부른다. 내부의 커널 명령어를 밖에서도 사용할 수 있도록 해준다.
- 프로그램의 형태를 가지고 있기도 한다.
- GUI - 터치나 마우스 등으로 선택 할 수 있음
- 직관적이고 편리한 방식으로 운영체제를 다룰 수 있게 해준다.
- 커멘드 라인에 대한 지식이 없는 사람이 사용할 수 있도록 설계
- 명령들을 몰라도 선택을 할 수 있다.
- I/O 디바이스들과 CPU는 경쟁관계에 있다. -> 메모리 데이터를 각자 읽고 써야하기 때문
- I/O 장치들은 작은 크기의 버퍼 메모리를 가지고 있다.
- 각 장치들마다 컨트롤러(프로그램)들이 있다.
- 데이터들을 메모리로 옮기거나 메모리에서 가져올 수도 있다.
- 이러한 일들을 정리해주는 것을 interrupt라고 한다.
- interrupt : 인터럽트는 제어를 모든 서비스 루틴의 주소를 포함하고 있는 인터럽트 벡터를 통해 인터럽트 서비스 루틴을 전송한다.
- 인터럽트에 의해 중단된 명령의 주소를 저장해야한다. -> 인터럽트처리 후 다시 돌아와야하기 때문
- 명령의 주소 뿐만 아니라 CPU가 처리하고있던 상황을 저장해야 한다. -> 스택에 저장
- 하나의 인터럽트가 처리되는 동안 다른 인터럽트가 들어와도 중단하지 않는다.(대부분)
- 인터럽트가 처리되는 도중에 다른 인터럽트의 요청이 오면 pending(대기)시킨 후 먼저 온 인터럽트가 처리된 후 하나씩 처리한다.
- trap : 할 수 없는 일(0으로 나누는 것 같은)에 대한 요청이 있을 경우 외부가 아닌 내부에서 인위적으로 판단하여 의미없는 작업을 하지 않도록 인터럽트를 발생시킴 -> 같은 인터럽트지만 외부에서 발생한것이 아니라 내부에서 발생한 것들을 trap이라고 한다.
- 많은 디바이스들에 운영체제가 있을 수 있다.
- 인터럽트 : 하드웨어적인 사건(clock, 디스크 쓰기 완료, 패킷 도착) -> 외부적(예측할 수 없음 - 비동기적)
- 트랩 : 소프트웨어적인 사건(페이지 부재 결함, divide by zero, 시스템 호출, access violation) -> 사용자가 운영체제 내부로 서비스를 받기 위해(시스템 콜) 안으로 들어가는 절차, 사용자가 프로그램이 하기 어려운 일을 운영체제에게 부탁하기 위해 시스템 콜을 호출한다. - ex)하드디스크의 저장 위치를 알고 싶을 때 운영체제에 부탁(예측 가능 - 동기적)

- 인터럽트가 판명이 되었을 때는 프로그램의 함수처럼 동작을 한다.
- 외부에 일이 생기면 CPU에 전달을 하고 CPU가 하던 일을 멈춘다.(운영체제가 멈춤)
- 어떤 인터럽트인지 테이블에서 찾는다. -> 자동으로 찾을 수 있도록 함
- 해당하는 함수 위치로 jump, 함수를 실행하고 종료 후, 원래 동작으로 돌아간다.
- 함수 부분을 handler 또는 ISR이라고 부른다.

- 초기상태 : CPU는 사용자의 일을 하고 있고 I/O는 아무일도 하지 않는다.
- I/O에서 요청이 발생하면 controlor가 신호(transfer)를 보낸다.
- CPU는 그 신호를 받고 하던일을 멈춘 후 I/O의 처리를 하고 다시 원상태로 복귀한다. -> ISR 실행
- Direct Memory Access Structure
- 데이터를 읽고 쓸 때, CPU가 다른 일을 하면서 동시에 할 수 있을까?
- 메모리 <-> 버퍼 간의 전송은 CPU의 관여없이 바로 전송할 수 있어야 한다.
- 블록단위로 전송 -> 워드
- cycle Stealing
- DMA 전송시간 중에 CPU와 Memory는 데이터를 상호 전송할 수 없다. -> I/O가 버스를 사용하면 버스는 하나이기 때문에 CPU의 버스는 HOLD상태에 있게 된다.
- 이 경우, CPU가 처리할 명령어 및 처리할 데이터가 메모리에 있으므로, CPU 원래의 목적(입출력 데이터 전송에 관계 없이 CPU가 계속 동작)에 문제가 있게 된다.
- 이를 해결하기 위해 CPU가 메모리와 관계 없는 동작을 할때만 DMA의 수행을 하게 한다. 이를 cycle stealing이라고 한다.
- Main memory - 컴퓨터가 프로그램을 수행하기 위해 필요한 주기억장치, 빠르게 읽고 쓸 수 있는 메모리중 저렴(RAM), 바이트단위로 데이터에 바로 접근할 수 있어야 한다. -> word단위
- 임의의 위치에 저장이 된다. -> 내가 원하는 위치를 바로 찾을 수 있다.(Random access)
- 프로그램을 저장하고 자료까지 전부 저장하기에 용량이 너무 작다.
- 전윈이 공급되지 않으면 내용을 바로 잃어버리는 휘발성 메모리이다.
- 보조기억장치(Secondary storage) : 주기억장치에 저장하지 못하는 것들을 이곳에 저장한다. 속도는 떨어지지만 용량은 크다. -> ex)flash, hard disk, ssd