운영체제 설계와 구현
* 운영체제의 요구사항 : 사용자 목적과 시스템 목적
- 사용자 목적 : 사용자가 사용하기 쉬워야 하고 신뢰성이 있어야하며 빨라야 한다.
- 시스템 목적 : 설계, 구현, 관리가 쉬워야하고 융통성 신뢰성 효율성이 있어야한다.
==> 이러한 요구사항은 모호하며 다양하게 해석될 수 있다!
==> 즉, 새로운 요구사항이 등장함에 따라 다양한 OS들이 개발되고 있다.
1. 운영체제의 구조
1) 단일(monolithic, 모노리틱) 커널 구조 : MS-DOS
: 컴퓨터 등장 초창기에 출현했으며, 운영체제의 거의 모든 기능이 하나의
프로그램에 의해 구현됨
ex. Unix : 초기의 유닉스(여러가지 기능들이 하나의 프로그램에 구현되어있었다.)
| 단일 커널 구조 : Unix |
2) 마이크로 커널 구조
: 중요 기능만 커널로 구현하고 나머지 많은 기능을 사용자 모듈인 서버들로 구현
=> 커널과 사용자 모듈 서버는 메시지를 사용하여 통신한다.
(서버는 사용자에게 서비스를 제공하는 모든 프로그램)
장점 : 확장이 쉽다.
커널이 작아 새로운 하드웨어의 이식이 쉽다.
코드가 적기 때문에 버그가 적어 신뢰성이 좋다.
단점 : 잦은 통신이 필요하기 때문에 성능저하의 우려가 있다.
(요즘은 하드웨어 기술이 발달함에 따라 거의 없다고 봐도 무방함)
==> 이러한 장점들 덕분에 기존의 OS들이 대부분 마이크로 커널로 옮겨오게 됨
ex. Mach, Mac OS X, Windows NT
==> 단일커널에서는 하드웨어 드라이버나 파일 시스템을 함수 호출로 실행했으나,
마이크로 커널에서는 메시지 통신을 통해 하드웨어 드라이버나 파일 시스템을
응용프로그램처럼 취급하여 실행한다.
3) 모듈 지원 구조
: 코널과 모듈을 분리하지만 실행시에 커널과 링크하여 함수호출하듯 프로그램을
실행하여 마이크로 커널의 문제점을 상쇄하는 운영체제.
평소에는 추가기능(프로그램)들을 모듈로 구현해 마이크로 커널같은 구조를 하고 있음. ----> 사용자가 프로그램을 실행하게 되면 운영체제가 해당 프로그램을 동적으로 메모리에 적재하고 커널에 링크한다. ---> 이후 함수호출하듯이 프로그램을 실행함.
ex. Solaris, Linux, Max OS X등...
2. 운영체제의 수행
* 컴퓨터 시스템의 메모리는 ROM(비휘발성)과 RAM(휘발성)으로 구성되며,
일반적으로 메모리의 첫 부분에는 ROM, 뒷부분는 RAM이 위치한다.
- Rom의 시작 위치에는 부트로더 프로그램이 저장되어 있다.
일반적으로 메모리의 첫 부분에는 ROM, 뒷부분는 RAM이 위치한다.
- Rom의 시작 위치에는 부트로더 프로그램이 저장되어 있다.
* 컴퓨터의 전원이 켜지면 CPU는 메모리의 첫 부분의 내용을 수행함
==> 부트로더가 실행되고, CPU모드는 커널 모드로 초기화됨
* 실행된 부트로더는 시스템을 초기화하고 보조기억장치(HDD)에서 운영체제를
읽어들여 메모리에 적재하고 CPU의 PC값을 OS의 메모리 주소로 바꿈으로서 실행시킨다.
* 운영체제가 부팅되면 시스템을 초기화하고 프로세서 모드를 사용자 모드로 변경한뒤
최초의 응용프로그램을 시작시킴 (Unix의 경우, init)
(OS가 PC값을 init프로그램이 적재된 메모리의 첫 주소로 변경시킴)
* 이후, 운영체제는 인터럽트에 의해 CPU 제어를 받아서 수행됨
(운영체제는 인터럽트에 의해 구동되는 프로그램)
(운영체제는 인터럽트에 의해 구동되는 프로그램)
- 타이머 인터럽트 : 주기적으로 인터럽트를 발생
(ex. 100ms가 기준이라면, 1초에 10번 os가 수행됨)
- 응용프로그램 : 시스템 호출을 수행
(ex. 사용자의 파일 열기 및 실행...)
- 입출력 장치 : 입출력을 마치면 인터럽트를 발생시킴
(ex. 100ms가 기준이라면, 1초에 10번 os가 수행됨)
- 응용프로그램 : 시스템 호출을 수행
(ex. 사용자의 파일 열기 및 실행...)
- 입출력 장치 : 입출력을 마치면 인터럽트를 발생시킴
* 인터럽트에 의해 운영체제가 수행 될 때, 운영체제는 먼저 CPU의 상태(registers의 값)
를 저장한다. 그리고 인터럽트 서비스 루틴(인터럽트의 시작주소)을 수행한 후, 저장했던
CPU의 상태를 복원하여 인터럽트가 발생하기 직전으로 상태로 CPU제어를 넘긴다.
를 저장한다. 그리고 인터럽트 서비스 루틴(인터럽트의 시작주소)을 수행한 후, 저장했던
CPU의 상태를 복원하여 인터럽트가 발생하기 직전으로 상태로 CPU제어를 넘긴다.
* CPU 모드 : OS가 자기자신을 보호하고 시스템 구성요소를 보호할 수 있게 함
- 사용자 모드와 커널모드로 나뉨
- 커널모드만이 특권명령어를 사용할 수 있음
* 운영체제는 항상 커널모드에서만 수행됨
- 인터럽트가 발생하면, 하드웨어적으로 CPU모드가 커널모드로 설정됨
- 따라서, 운영체제는 항상 커널모드에서 수행된다.
- 운영체제가 인터럽트를 처리한 이후, 특권명령어를 수행하여 CPU모드를 변경
- 사용자 모드와 커널모드로 나뉨
- 커널모드만이 특권명령어를 사용할 수 있음
* 운영체제는 항상 커널모드에서만 수행됨
- 인터럽트가 발생하면, 하드웨어적으로 CPU모드가 커널모드로 설정됨
- 따라서, 운영체제는 항상 커널모드에서 수행된다.
- 운영체제가 인터럽트를 처리한 이후, 특권명령어를 수행하여 CPU모드를 변경
3. 운영체제와 사용자 인터페이스의 연관성
1) CLI (Command Line Interface)
- 키보드를 사용하여 직접 명령어를 입력
ex. Unix shells, MS windows cmd
2) GUI (Graphical User Interface)
- 마우스와 키보드를 사용하여, 파일, 프로그램 등을 아이콘으로 나타냄
- 보통 대부분의 시스템들은 CLI와 GUI를 모두 다 제공함
* 시스템 호출
: 운영체제가 응용 프로그램에게 제공하는 시스템 함수
=> 응용 프로그램은 마치 함수 호출하듯이 호출하여 사용할 수 있다.
- 응용 프로그램은 직접 하드웨어를 제어하거나 파일을 읽기 / 쓰기 할 수 없다.
-> 따라서, 운영체제가 이러한 서비스를 대신하여 응용프로그램에게 제공함
=> 응용 프로그램은 마치 함수 호출하듯이 호출하여 사용할 수 있다.
- 응용 프로그램은 직접 하드웨어를 제어하거나 파일을 읽기 / 쓰기 할 수 없다.
-> 따라서, 운영체제가 이러한 서비스를 대신하여 응용프로그램에게 제공함
댓글 없음:
댓글 쓰기