OS는 애플리케이션 프로그램을 실행 및 중단시키는 프로그램이다 = 애플리케이션 프로그램과 하드웨어 사이의 인터페이스
시스템 안에는 리소스를 많이 사용하는 사람도 있고 조금 사용하는 사람들도 있는데 이런 것들을 전부 OS가 관리한다. CPU를 많이 사용한 사람에게는 CPU를 안주고 적게 사용한 사람은 CPU를 더 많이 사용할 수 있게 해준다.
결국 OS의 역할은 크게 두가지다.
인터페이스로서의 역할은 거의 정리가 되었다. 하지만 리소스 매니저로서의 역할은 계속 새로운 것이 생긴다. 새로운 디바이스가 생기고, 메모리도 점점 커진다. 결국 리소스 매니저로서의 역할은 계속 새로운 역할이 부여되고 어려워진다.
리소스 매니저로서 OS가 일을 하는데 제일 중요한 것은 얼마나 효율적으로 관리를 하느냐이다.
옛날에는 OS = kernel이다. 전체 OS가 작아서 OS 프로그램 전체가 메인 메모리 안에 다 들어갔다. 그러나 점점 OS가 해야하는 일들이 많아지면서 메인 안에다가 다 집어넣지 않는다. 프로그램을 여러 개의 모듈로 잘라서 프로그램을 작성하고 어떤 모듈은 항상 메모리에 있는다.
그래서 전체 OS 프로그램중 항상 메인 메모리에 올라와있어야 하는 부분을 커널
이라 부른다.
한 번에 한 프로그램만 실행을 시킨다. 일단 실행을 시작하면 끝날 때까지 다른 프로그램을 실행시키지 않는다.
I/O 작업을 하는동안은 CPU가 쉬게된다.
동시에 여러 프로그램들을 메모리에 집어넣을 수 있다. 메모리 안에는 여러 프로그램들이 들어있고 실행하다가 중단시키게 되면 중단했을 때의 CPU의 상태를 저장할 수 있다.
멈추는 작업은 OS가 해야한다. 따라서 Combined는 사실 A - OS - B - OS - C 이렇게 프로그램 실행을 시작시키고 중단시키는 작업은 OS가 한다.
Multiprogrammed Batch System에서는 IO작업을 할 때만 프로그램을 바꾼다 → IO 없이 굉장히 오래동안 실행하는 상황이 있을 수 있음
OS는 굉장히 큰 프로그램이다. 너무 큰 프로그램이기 때문에 한번에 메모리가 다 들어가지 못하고 잘라서 메모리에 집어넣는다. 항상 메모리에 들어있는 부분을 커널
이라 한다.
마이크로 커널
이란 이 커널을 최소화하는 것이다. 그리고 나머지 프로그램들을 별도의 OS 프로세스로 만든다. 커널 이외의 나머지 OS 서비스들을 별개의 OS 프로세스로 만들어서 실행시킨다.
모든 OS 모듈 간 통신은 커널을 통해서 이루어진다. 모듈 하나를 바꾸고 싶다면 해당하는 모듈이 맞닿는 부분만 수정하면 된다 ⇒ 확장성이 좋다.
마이크로 커널을 사용하는 이유 : 확장성
프로그램을 여러 개 동시에 실행할 수 있게 구성한다. 멀티 쓰레드를 사용하면 실행 속도가 빨라진다. CPU가 1개여도 멀티 쓰레드의 속도가 빨라지는 이유는 IO작업이 나와도 자신의 프로그램이 계속 실행되기 때문이다.
CPU가 여러 개이고, 메모리가 하나이면 여러 개의 CPU가 동시에 OS를 실행시키게 된다. 이 상황에서는 동시에 실행이 되면 안되는 작업이 존재할 수 있다. 그래서 동기화가 필요하게 되고 CPU의 개수에 따라 속도가 배가 되지 않는다.
여러 개의 CPU를 가진 멀티 프로세서에서의 OS 설계. 하나의 시스템 안에 CPU가 많이 있다.
각각의 pc들을 연결해서 OS를 한겹 더 씌운다. 그 후 하나의 컴퓨터처럼 사용한다. 동기화부터 시작해서 해야할 일들이 많다.
하나의 CPU를 가지는 여러 시스템을 네트워크로 연결해서 하나의 시스템처럼 사용한다.
마이크로 커널을 사용하게 되면서 OS를 서로 완전히 분리된 별개의 오브젝트로 나누어서 디자인한다. 윈도우 시스템이 마이크로 커널을 사용하고 Object-Oriented Design을 사용하는 대표적인 OS이다.
반면에 유닉스는 마이크로 커널도, Object-Oriented Design도 사용하지 않는다. 그래서 커널을 하나의 덩어리로 사용한다. 리눅스도 비슷하지만 최근에는 Obejct-Oriented Design을 사용한다.
유닉스가 가지는 장점은 속도다. 스위칭 되는 횟수가 적기 때문에 시간 차이가 발생한다.