2장 

운영체제는 기계와 사람간의 인터페이스(중간역할)를 제공, 시스템의 리소스를 동적으로 나누어주는 역할. 

운영체제는 메모리와 프로세스, 장치들을 관리하는 역할. 원래는 응용프로그램에 있던것을 운영체제로 많이 들여옴.



응용프로그램의 실행을 제어하는 프로그램

application과 하드웨어의 중간 역할



하드웨어는 cpu, io 장치와 연결하는 버스가 있다

사용자가 생각하는 메모리와 물리적인 메모리를 맵핑하는 Memory translation이 cpu에 들어가있다.

하드웨어 위에 운영체제가 있고, 그 위에 공통적으로 필요로 하는 기능을 가지고있는 라이브러리가 있고, 그 위에 application

instruction set Arc~ : 하드웨어가 제공하는 기계어 set, 이것이 일치하면 cpu가 같은것. 기계어로 번역된 바이너리 프로그램을 그대로 실행할수 있는 인터페이스를 제공

프로그램을 실행하다보면 운영체제에 있는 함수들을 쓰게 된다. 그런것을 제공하는 인터페이스를 Application Binary interface 라고 함. (운영체제에 따라서 다르다. 윈도우의 ABI와 mac의 ABI는 다름. 프로그램을 옮겨와서 실행할수는 없다)

그 위에 라이브러리가 포함되어서 Application Programming Interface 를 제공하게 된다. sin, cos 계산. ex) 웹서비스 개발중의 api

그 위에 application이 돌아가게 된다.



# 운영체제는


프로그램을 실행

프로그램 개발

IO devices access 기능이 주어진다

controlled access to files

system access

error detection and response

accounting - 여러사람이 나누어쓰면... 아마존 웹서비스 같은경우 사용량에 따라 돈을 낸다. 얼마나 썼는지 확인하는 기능



# Three Key Interfaces

ISA, ABI, API

기존 프로그램을 다운로드 해서 쓸수 있다 - API가 맞아야

ISA가 같은 프로그램 - 그 하드웨어에서 실행할 수 있다.


응용프로그램을 가져와서 컴파일해서 실행할수 있으려면 API가 같아야. 라이브러리가 틀리면 하부에서 기능을 제공할수 없다. (호환성) 위 그림에서와 같이 3가지 인터페이스를 모두 사용할수 있기 때문에 맞지 않으면 컴파일이 안됨.

컴파일러, 인터프리터를 사용하여 번역 - 버전이 맞지 않으면 프로그램이 번역되지 않음

3가지와 + 컴파일러, 인터프리터 버전까지 맞아야 가져온 프로그램이 실행될수 있다.



# 운영체제의 역할


컴퓨터가 여러 리소스를 가지고 있다.

instruction - 데이터를 옮기고 가져오고 처리하는것으로 이루어짐

instruction set을 사용해서 리소스간에 데이터를 옮기고 리소스를 관리하는것이 운영체제



이 운영체제는 일반적으로 소프트웨어처럼 동작.

차이는 실행하다가 control을 넣고 프로그램을 실행하다가 다시 돌아오는 일이 빈번하게 이루어지는 소프트웨어(인터럽트)


# resource manager로서의 OS




# 운영체제의 발전

운영체제는 여러 이유로 발전함



우리가 사용하는 OS는 이들 조합중 하나

휴대폰 - 여러 앱이 동시에 도는 것처럼 Time Sharing system (실제로 코어가 여러개라서 동시에 돈다)

아두이노, IOT, 에어컨 - 인터럽트가 있는 Serial Processing하는 시스템



# Serial Processing



os가 없고 프로그래머가 하드웨어에 직접 입력하는

컴퓨터는 console 디스플레이가 있어서 메모리 내용을 불빛으로 확인하는

사용자는 컴퓨터를 기다리다가 사용 가능시간에 돌려보는... (1950년대 중반까지)


Scheduling의 필요성, 종이에 써서 약속받았으나 실제로는 더 짧거나 오래 걸리는 문제

setup time 오래걸림



# Simple Batch Systems


초기 컴퓨터는 비용 높고 유지보수 어렵다

processor utilization을 높이는게 os 목적

scheduling과 setup 시간을 줄이는게 필요

Monitor - 시스템을 관찰하고 여러 프로그램을 묶어서 배치하여 처리하는

더이상 직접 프로세서에 access 해서 scheduling과 setup 필요가 없게 됨

job은 operator에 의해 묶음으로 배치가 되고 그것을 입력장치에 집어넣어서 setup이 되는. 이때 monitor 소프트웨어가 사용됨

각 프로그램은 종료가 되면 모니터에게 제어를 돌려준다.



모니터는 메모리의 일부를 차지하고, 오늘날의 shell과 같은 역할. 

shell은 현재 입력을 해석해서 유저 프로그램을 로딩하고, 그것을 실행하도록 PC를 유저 프로그램의 첫번째 주소로 점프하도록 하는 기능 가짐

모니터는 여러가지 IO를 포함한 이벤트를 컨트롤하고, 유저 프로그램이 실행 된다음에 결과를 인터럽트를 사용해서 출력, JOB은 끝날때 controll을 모니터에게 돌려주는


# 모니터 프로그램이 하는 일


명령어 실행해서 메모리에 프로그램 로딩

프로세스는 branch 명령 사용해서 user program에 starting포인트로 controll 넘겨줌

user program 실행

실행후 monitor로 controll 넘겨줌. 다시 다음 job 로딩, 이걸 반복



이때 사용되는 언어가 JCL

모니터에게 일을 시키기 위한 명령들, 무슨 컴파일러를 쓸지 어떤 데이터를 쓸지

컴파일과 로딩하는 명령을 가짐



# 배치 os는 실행되기 위해 다음과 같은 하드웨어가 필요


1. 유저 프로그램 실행시 모니터를 건드리지 못하도록, memory protection

2. Timer, 무한루프 막기 위해서 Timer interrupt

3. 사용자 프로그램이 io디바이스를 건드릴수 없도록, 특권 명령을 가져서 모니터에서만 실행되도록

4. 인터럽트 - control을 유저 프로그램에서 os로 넘겨주도록

오늘날도 이런 하드웨어 기능들은 제공되고 있다.



모니터를 보호하기 위해서 2가지 실행 상태를 갖는다.

user mode - user program 실행상태, 모니터 영역에 해당되는 메모리는 건드릴수 없다.(read, write불가), io instruction 실행불가

kernel mode - 모니터 메모리 영역 접근가능, 모든 io명령 사용가능

오늘날의 프로세스도 이 두개의 모드를 가지고 있다. 2개 모드를 왔다갔다 하면서. 이것이 보안 메커니즘의 기본이기도 함



대신 overhead를 가지고 있다.

프로세스 time을 어쩔수 없이 사용자 프로그램 외 다른 용도로 사용하게 된다. 그리고 모니터 프로그램 담기 위해 메모리 공간이 필요.

그럼에도 batch system은 utilization을 향상시켜서 사용하게 됨



자세히 들여다보면 프로세스의 사용은 여전히 미진하다

읽기 쓰기에 비해 instruction시간이 매우 짧다. 대부분 시간은 cpu가 놀고 있는 시간이 된다. IO 디바이스가 cpu에 비해 상대적으로 느리기 때문에



#




multitasking - 한 task가 io를 하면 그 구간을 다른 프로그램을 돌도록 만들어준다.

대신 프로그램을 동시에 담아야 하니 메모리는 조금 더 필요하다.


#


JOB = Task = Process 같은 말로 사용

system utilization 높임



# Time-Sharing system


Time-Sharing system의 개발

batch 시스템이 여러개의 task를 동시에 시스템을 넣고 돌리는 멀티 프로그래밍

Time-Sharing system은 여러개의 interactive job을 동시에 넣고 multiple user을 동시에 수용하는 시스템


#


목적만 다르지만 시스템 구성은 거의 같다

batch Multiprogramming - 프로세서 사용 극대화

Time-Sharing system - response time을 줄이는것(즉각 반응하도록)



#


처음으로 Time Sharing system - CTSS