2.01 - 강원대학교 컴퓨터과학전공
Download
Report
Transcript 2.01 - 강원대학교 컴퓨터과학전공
Silberschatz, Galvin and Gagne ©2006
Operating System Principles
2장: 운영 체제 구조
Mi Jung Choi
[email protected]
Dept. of Computer Science
Ch2. Operating-System Structures
2장: 운영체제 구조
운영체제 서비스
사용자 운영체제 인터페이스
시스템 호출(System Calls)
시스템 호출의 종류
시스템 프로그램(System Programs)
운영체제 설계 및 구현
운영체제 구조
Operating System
-2-
Fall 2014
Ch2. Operating-System Structures
이 장의 목적
운영체제가 사용자와 프로세스, 다른 시스템에게 제공하는
서비스를 설명한다
운영체제를 구조화하는 다양한 방법에 대해 알아본다
Operating System
-3-
Fall 2014
Ch2. Operating-System Structures
누구에게: 사용자(Users), 프로세스(Processes), 다른 시스템(Other systems)
운영 체제 서비스
무엇을 가지고: 메모리, 저장소, 장치, CPU
운영체제 서비스는 사용자에게 도움이 되는 기능들을 제공한다
운영체제의 또 다른 기능은 자원을 공유하므로 스스로 시스템의 효율
적인 연산을 보장하기 위한 것이다
Operating System
-4-
Fall 2014
Ch2. Operating-System Structures
운영체제 서비스
운영체제 서비스는 사용자에게 도움이 되는 기능들을 제공
한다:
사용자 인터페이스(User Interface)
대부분의 모든 운영체제는 사용자 인터페이스(UI) 를 가진다
명령어 인터페이스(CLI), 그래픽 사용자 인터페이스(GUI), 일괄
처리 인터페이스 등 다양하다
프로그램 실행(Program Execution)
Operating System
시스템은 프로그램을 메모리에 적재하고, 적재한 프로그램을 실
행하고, 정상적이든 비정상적(에러를 의미함)이든 종료할 수 있
어야 한다
-5-
Fall 2014
Ch2. Operating-System Structures
운영체제 서비스
운영체제 서비스는 사용자에게 도움이 되는 기능들을 제공
한다:
입출력 연산(I/O Operations)
실행 프로그램은 파일이나 입출력 장치를 포함하는 입출력을 요
구할 수 있다
파일 시스템 조작(File-system Manipulation)
파일 시스템은 특별한 관심 사항이다
프로세스는 다음과 같은 기능을 필요로 한다
–
–
–
–
Operating System
파일과 디렉터리를 읽고 쓰는 기능
파일과 디렉터리를 생성하고 삭제하는 기능
파일과 디렉터리를 검색하는 기능
파일 정보를 리스트하는 기능
권한 관리 또한 필요하다
-6-
Fall 2014
Ch2. Operating-System Structures
운영체제 서비스
운영체제 서비스는 사용자에게 도움이 되는 기능들을 제공
한다:
통신(Communications)
프로세스는 같은 컴퓨터 내에서 또는 네트워크를 통해 다른 컴
퓨터 사이에 정보를 교환한다
통신은 공유 메모리나 메시지 전송(OS에 의한 패킷 전송)을 통
해 가능하다
오류 검출(Error Detection)
운영체제는 끊임없이 가능한 오류에 대해 인식할 필요가 있다
– CPU와 메모리, 입출력 장치, 사용자 프로그램 내에서 발생할 수 있다
Operating System
각 오류 종류에 따라, 운영체제는 정정해서 계산을 계속할 수 있
도록 적절한 행동을 취해야 한다
디버깅 도구들은 사용자와 프로그래머의 시스템을 효율적으로
사용하는 능력을 향상시킬 수 있다
-7-
Fall 2014
Ch2. Operating-System Structures
운영체제 서비스
운영체제의 또 다른 기능은 자원을 공유하므로 스스로 시
스템의 효율적인 연산을 보장하기 위한 것이다:
자원 할당(Resource allocation)
여러 사용자와 여러 작업이 동시에 수행될 때, 자원은 각각에 할
당되어야 한다
많은 종류의 자원들이 있다
– CPU 사이클, 주 메모리, 파일 저장소와 같은 자원들은 특정 할당 코드를
가진다
– 입출력 장치와 같은 다른 자원들은 일반적인 요청과 양도(release) 코드를
가진다
계정(Accounting)
Operating System
어떤 사용자가 어떤 종류의 컴퓨터 자원을 얼마나 사용했는지
기록하는 (keep track of) 것이다
-8-
Fall 2014
Ch2. Operating-System Structures
운영체제 서비스
운영체제의 또 다른 기능은 자원을 공유하므로 스스로 시
스템의 효율적인 연산을 보장하기 위한 것이다:
멀티 유저 컴퓨터 시스템에서의 보호와 보안
정보 소유자는 정보의 사용을 제어하기를 원한다
동시에 수행되는 프로세스들이 서로 방해하지 않도록 한다
보호(Protection)는 시스템에 대한 모든 접근 권한이 통제되는
것을 보장한다
보안(Security)은 외부사람으로부터 시스템에 대한 사용자 인증
(user authentication)을 요구한다
– 인식 불가능한 접근 시도로부터 외부 입출력 장치를 방어하도록 확장한다
Operating System
-9-
Fall 2014
Ch2. Operating-System Structures
사용자 운영체제 인터페이스 - CLI
CLI는 직접적인 명령 입장을 허락한다
명령어 라인 인터페이스: Command Line Interface(CLI)
때때로 커널(kernel)에서 구현된다
때로는 시스템 프로그램으로 구현된다
때로 여러 취향에 따라 구현된다 – shells
BASH (Bourne-Again SHell), CSH (C SHell), KSH (Korn
SHell), TCSH on Linux
CMD on windows XP
기본적으로 사용자로부터 명령어를 받아들여 그것을 수행한다
때로 명령어들은 내장된다(built-in)
때로 단순히 프로그램 이름이다
– 새로운 특징을 추가하는 것은 쉘의 수정을 요구하지 않는다
Operating System
- 10 -
Fall 2014
Ch2. Operating-System Structures
사용자 운영체제 인터페이스 - GUI
사용자 친숙 데스크톱 은유 인터페이스
보통 마우스, 키보드, 모니터
아이콘(Icons)은 파일, 프로그램, 행동(action) 등을 나타낸다
객체에 대한 다양한 마우스 버튼은 다양한 행동을 유발한다
정보, 선택사항, 수행 기능, 디렉터리 열람을 제공한다
Xerox PARC에서 개발되었다
많은 시스템들이 현재 CLI와 GUI 인터페이스 두 가지를 다
제공한다
마이크로소프트 윈도우는 “command”나 “cmd” 쉘인 CLI를 가진
GUI 인터페이스이다
애플 맥(Mac) 운영체제 X는 유닉스 커널 하부에 쉘이 가능하게 하는
“Aqua” GUI 인터페이스이다
리눅스는 선택적으로 GUI 인터페이스(GNOM, KDE) 를 지원하는
CLI이다
Operating System
- 11 -
Fall 2014
Ch2. Operating-System Structures
시스템 호출
프로세스가 운영체제와 통신하는 유일한 방법이다
운영체제에 의해 제공되는 서비스에 인터페이스를 제공한다
Operating System
- 12 -
Fall 2014
Ch2. Operating-System Structures
시스템 호출
운영체제가 지원하는 서비스에 대한 프로그래밍 인터페이스
전통적으로 고급 언어로 작성된다 (C나 C++)
때때로 어셈블리 언어 명령어를 사용해서 작성되기도 한다
대부분 프로그램에 의해 접근되는 방법은 직접적인 시스템
호출보다 고급 응용 프로그램 인터페이스(Application
Program Interface: API)이다
각 API는 하나 이상의 시스템 호출로 이루어진다
API들은 운영체제에 따라 다르다(OS specific)
왜 시스템 호출보다 API를 사용하는가?
시스템 호출보다 더 간단한 방법을 제공하고 구현에 대한 자세한 것
을 숨기기 위해서
Operating System
- 13 -
Fall 2014
Ch2. Operating-System Structures
시스템 호출의 예제
한 파일의 내용을 다른 파일에 복사(copy)하는 시스템 호출
순서
scanf(infile)
scanf(outfile)
fopen(“r”);
fopen(“w”);
fgetc();
fputc();
fclose(infile);
fclose(outfile);
exit();
Operating System
- 14 -
Fall 2014
Ch2. Operating-System Structures
시스템 호출 구현
전통적으로, 각 시스템 호출에는 번호(a number)가 할당된
다
시스템 호출 인터페이스는 이 번호에 따라 색인되는 테이블을 유지
한다
시스템 호출 인터페이스는 OS 커널내의 의도하는 시스템 호출을 부
르고 시스템 호출 상태와 반환 값을 되돌려준다
호출자는 시스템 호출이 어떻게 구현되는지에 대해서는 아
무것도 알 필요가 없다
단지 API를 준수하고 시스템 호출 결과로 운영체제가 무엇을 해 줄
것인지만 이해하면
운영체제 인터페이스에 대한 대부분의 자세한 내용은 API에 의해
프로그래머로부터 숨겨진다
Operating System
- 15 -
Fall 2014
Ch2. Operating-System Structures
API – 시스템 호출 – 운영체제 관계
Operating System
- 16 -
Fall 2014
Ch2. Operating-System Structures
표준 C 라이브러리 예제
C 프로그램은
printf() 라이브러리
호출을 부르고,
이것은 write()
시스템 호출을
부른다
Operating System
- 17 -
Fall 2014
Ch2. Operating-System Structures
시스템 호출 매개변수 전송
종종, 단순히 원하는 시스템 호출이 무엇인지보다 더 많은
정보가 요구될 경우도 있다
필요한 정보의 유형과 양은 특정 운영체제와 시스템 호출에 따라 다
양하다
운영체제에 매개변수를 전달하기 위해서 세 가지 일반적인
방법을 사용한다
가장 간단한 방법: 매개 변수를 레지스터 내에 전달하는 것
어떤 경우는 레지스터보다 더 많은 매개변수가 있을 수 있다
매개변수는 메모리 내의 블록이나 테이블에 저장되고, 블록의 주소
가 레지스터 내에 매개변수로 전달된다
이런 접근법은 리눅스와 솔라리스가 사용한다
매개변수는 프로그램에 의해 스택에 넣어질(push) 수 있고, 운영체
제에 의해 꺼내진다(pop off)
운영체제는 블록이나 스택 방법을 선호하는데, 이들 접근법은 전달
되는 매개변수들의 개수나 길이를 제한하지 않기 때문이다
Operating System
- 18 -
Fall 2014
Ch2. Operating-System Structures
테이블을 통한 매개변수 전송
Operating System
- 19 -
Fall 2014
Ch2. Operating-System Structures
시스템 호출의 유형 (1)
시스템 호출의 다섯 가지 유형
프로세스(Process) 제어(control)
파일(File) 관리(management)
장치(Device) 관리(management)
정보(Information) 유지(maintenance)
통신(Communications)
Operating System
- 20 -
Fall 2014
Ch2. Operating-System Structures
시스템 호출의 유형 (2)
프로세스 제어(Process control)
끝내기(end), 중지(abort)
적재(load), 실행(execute)
프로세스 생성, 프로세스 종료
프로세스 속성(attribute) 획득, 프로세서 속성 설정
시간을 기다림
사건을 기다림(wait event), 사건을 알림(signal event)
메모리 할당 및 자유화
파일 관리(File management)
파일 생성(create file), 파일 삭제(delete file)
열기(open), 닫기(close)
읽기, 쓰기, 위치 변경(reposition)
파일 속성 획득 및 설정
Operating System
- 21 -
Fall 2014
Ch2. Operating-System Structures
시스템 호출의 유형 (3)
장치 관리(Device management)
장치 요청(request device), 장치 방출(release device)
읽기, 쓰기, 위치 변경(reposition)
장치 속성 획득, 장치 속성 설정
장치의 논리적 부착(attach) 또는 분리(detach)
정보 유지(Information maintenance)
시간과 날짜의 설정과 획득
시스템 자료의 설정과 획득
프로세스, 파일, 장치 속성의 획득
프로세스, 파일, 장치 속성의 설정
Operating System
- 22 -
Fall 2014
Ch2. Operating-System Structures
시스템 호출의 유형 (4)
통신 (Communications)
통신 연결의 생성, 제거
메시지의 송신, 수신
상태 정보 전달
원격 장치의 부착(attach) 및 분리(detach)
Operating System
- 23 -
Fall 2014
Ch2. Operating-System Structures
MS-DOS 실행
(a) 시스템 시작시에
Operating System
(b) 프로그램 수행시에
- 24 -
Fall 2014
Ch2. Operating-System Structures
시스템 프로그램 (1)
시스템 프로그램은 프로그램을 개발하고 수행하기 편리한
환경을 제공한다
어떤 것은 간단한 사용자 인터페이스이고; 어떤 것은 상대적으로
더 복잡한 것들이다
다음과 같이 나뉠 수 있다:
파일 조작(File manipulation)
상태 정보(Status information)
파일 수정(File modification)
프로그래밍 언어 지원(Programming language support)
프로그램 적재 및 수행(Program loading and execution)
통신(Communications)
시스템 연산에 대한 대부분의 사용자 관점은 실제 시스템
호출이 아닌 시스템 프로그램에 의해 정의된다
Operating System
- 25 -
Fall 2014
Ch2. Operating-System Structures
시스템 프로그램 (2)
파일 관리(File management)
생성, 삭제, 복사, 재명명(rename), 출력, 덤프(dump), 리스트(list),
일반적인 파일과 디렉터리 조작에 관한 것
상태 정보(Status information)
어떤 프로그램은 시스템 정보를 요청한다
날짜, 시간, 사용 가능한 메모리 양, 디스크 용량, 사용자 수 등
자세한 성능, 로깅, 디버깅 정보
통상적으로, 이 프로그램들은 정보를 단말기나 다른 출력 장치 혹은
파일로 포맷하여 인쇄하거나 GUI 윈도우에 표시한다
몇몇 시스템은 환경 설정 정보를 저장하고 검색할 수 있는 등록소
(registry) 기능을 지원하기도 한다
Operating System
- 26 -
Fall 2014
Ch2. Operating-System Structures
시스템 프로그램 (3)
파일 수정(File modification)
텍스트 에디터는 파일을 생성하고 수정한다
특정 명령어들은 파일의 내용을 찾거나(search) 텍스트의 변환
(transformation)을 수행한다
프로그래밍 언어 지원(Programming-language support)
컴파일러(Compilers), 어셈블러(assemblers), 디버거(debuggers),
해석기(interpreters) 등이 지원된다
Operating System
- 27 -
Fall 2014
Ch2. Operating-System Structures
시스템 프로그램 (4)
프로그램 적재와 수행
일단 프로그램이 어셈블되거나 컴파일된 후, 그것이 실행되기 위해
서는 반드시 메모리에 적재되어야 한다
시스템은 절대 적재기(Absolute loaders), 재배치 가능 적재기(relocatable loaders), 링키지 편집기(linkage editors), 중첩 적재기
(overlay-loaders) 등을 제공할 수 있다. 또한 고급어나 기계어를 위
해 디버깅 시스템(debugging systems)도 필요하다
통신
프로세스, 사용자, 컴퓨터 시스템 사이에 가상 연결을 생성할 수 있
는 방법을 제공한다
사용자들이 다른 사용자 화면으로 메시지를 전송하거나, 웹 페이지
를 브라우징하고, 전자 메일 메시지를 보내거나, 원거리에서 로그인
하거나, 한 기계에서 다른 기계로 파일을 전송할 수 있게 한다
Operating System
- 28 -
Fall 2014
Ch2. Operating-System Structures
운영체제 설계 및 구현
Operating System
- 29 -
Fall 2014
Ch2. Operating-System Structures
운영체제 설계 및 구현 (1)
운영체제의 설계와 구현에 대한 완전한 해결책은 없다
그러나 성공적인 접근 방법들이 있다
서로 다른 운영체제의 내부 구조는 다양하다
시스템의 목표와 명세 정의하는 것
하드웨어와 시스템 유형의 선택에 영향을 받는다
일괄처리(batch), 멀티프로그래밍(multiprogramming), 멀티태스킹
(multitasking)
단일 사용자, 다중 사용자
분산(distributed), 실시간(real-time), 범용(general purpose)
사용자 목적과 시스템 목적
사용자 목적 – 운영체제는 사용하기 편리해야 하고, 배우기 쉽고, 믿을 수
있고, 안전하고, 신속해야 한다
시스템 목적 – 운영체제는 설계, 구현, 유지보수가 쉬워야 하고, 또한 적응
성, 신뢰성, 무오류, 효율성을 가져야 한다
Operating System
- 30 -
Fall 2014
Ch2. Operating-System Structures
운영체제 설계 및 구현 (2)
다음 2가지를 분리하는 것이 중요 원칙이다
정책(policy): 무엇을 해야 하는가?
방법(mechanism): 어떻게 해야 하는가?
방법들은 어떻게 할지를 결정한다
정책들은 무엇이 이루어져야 하는지 결정한다
방법과 정책을 분리하는 것이 매우 중요한 원칙이다,
이것이 후에 정책 결정이 바뀌더라도 유연성을 최대한 보장한다
먼저 운영체제가 설계된 후에, 구현되어야 한다
전통적으로, 어셈블리 언어로 구현된다
현재, 고급 언어로 구현되고 있다 (C: 리눅스, 윈도우)
Operating System
- 31 -
Fall 2014
Ch2. Operating-System Structures
운영체제 구조
1.
2.
3.
4.
간단한 구조(Simple Structure)
계층적 구조(Layered Structure)
마이크로커널 시스템 구조(Microkernel System Structure)
모듈화 커널 구조(Modular Kernel Structure - Modern OS)
Operating System
- 32 -
Fall 2014
Ch2. Operating-System Structures
1. 간단한 구조
MS-DOS
정책- 최소한의 공간(자원)에서 최대한의 기능을 제공하는 것이다
모듈로 분할되지 않았다
비록 MS-DOS가 어느 정도는 구조화 되어있지만, 기능별 인터페이
스와 계층이 제대로 구분되지 않았다
Operating System
- 33 -
Fall 2014
Ch2. Operating-System Structures
MS-DOS 계층 구조
Operating System
- 34 -
Fall 2014
Ch2. Operating-System Structures
2. 계층적 접근
운영체제 시스템은 여러 계층(layer, level)으로 구분된다
최하위 계층(layer 0): 하드웨어;
최상위 계층(layer N): 사용자 인터페이스
모듈화를 통해, 각 계층은 바로 아래 계층에서 제공하는 기
능(연산)과 서비스만을 사용한다
전형적인 운영체제 계층 (layer M)은 데이터 구조와 상위 계층에 의
해 호출될 수 있는 작업 집합으로 이루어진다
계층 M(Layer M)은 하위 계층에 대한 연산을 호출할 수 있다
Operating System
- 35 -
Fall 2014
Ch2. Operating-System Structures
계층 구조의 운영체제
Operating System
- 36 -
Fall 2014
Ch2. Operating-System Structures
계층적 접근
장점
구축과 디버깅의 단순함
설계와 구현이 단순하다
각 계층은 하위 계층에서 제공하는 연산(기능)만을 통해 구현된다
각 계층은 이 연산들이 어떻게 구현되었는지 알 필요가 없다
단점
다양한 계층들이 대략적으로 정의된다
각 계층은 오직 하위 계층들에서 제공하는 기능만을 사용하기 때문
에, 주의 깊은 계획이 요구된다
Operating System
- 37 -
Fall 2014
Ch2. Operating-System Structures
유닉스
유닉스 운영체제는 두 부분으로 구성된다
시스템 프로그램(Systems programs)
커널(kernel)
시스템 호출 인터페이스 아래단과 물리적 하드웨어 상위단의
모든 것으로 구성된다
파일 시스템, CPU 스케줄링, 메모리 관리, 운영체제의 다른 기
능들을 제공한다; 하나의 계층에 너무 많은 기능들이 수행된다
유닉스의 기능이 확장됨에 따라, 커널이 점점 더 거대해진
다
Operating System
- 38 -
Fall 2014
Ch2. Operating-System Structures
유닉스 시스템 구조
Operating System
- 39 -
Fall 2014
Ch2. Operating-System Structures
3. 마이크로커널 시스템 구조
커널을 가능한 한 경량화한다
많은 기능을 커널로부터 “사용자” 공간으로 이동한다
통신은 사용자 모듈 사이에서 메시지 전달을 통해 이루어진다
카네기 멜론 대학(CMU)에서 Mach OS를 구현했다
장점
마이크로커널을 확장하기 쉽다
운영체제를 새로운 구조로 이식(port)하기 쉽다
(커널에서 수행되는 코드가 더 적으므로) 더 안정적(reliable)이고 더
안전(secure)하다
단점
커널 공간과 통신하기 위한 사용자 공간의 성능 오버헤드(overhead)
Operating System
- 40 -
Fall 2014
Ch2. Operating-System Structures
4. 모듈화 커널 구조
대부분의 현대 운영체제는 커널 모듈을 구현한다
커널은 핵심 컴포넌트들로 이루어지며 부팅시나 실행시에 부가적인
서비스들을 동적으로 연결(link)한다
객체 지향(object-oriented) 접근을 사용한다
각 핵심 컴포넌트는 나뉘어져 있다
각 컴포넌트는 정해진 인터페이스를 통해 다른 컴포넌트와 대화한
다
각 컴포넌트는 커널내에서 필요에 따라 적재 가능하다
결론적으로, 계층 구조와 유사하나 더 유연(flexible)하다
Operating System
- 41 -
Fall 2014
Ch2. Operating-System Structures
솔라리스 모듈화 접근법
Operating System
- 42 -
Fall 2014
Ch2. Operating-System Structures
모듈화된 커널 구조
모듈화 커널 접근법은 계층구조 접근법과 유사하다
모듈화 커널 접근법은 서브시스템들이 서로 정해진 인터페이스를
통해 상호작용하도록 요구한다
그러나 모듈화 커널 접근법은 아래 측면에서 계층적 접근법
과 다르다
계층적 커널은 하위 계층에 있는 서브시스템들은 대응하는 상위 계
층의 서브시스템의 연산을 호출할 수 있도록 허용하지 않는 아주 엄
격한 서브시스템의 순서(strict ordering of subsystem)를 가지고 있
다
모듈화 커널 접근법에서는 이런 제약이 없다. 모듈들은 어떤 제약 없
이 서로 자유롭게 호출할 수 있다
Operating System
- 43 -
Fall 2014
Ch2. Operating-System Structures
요약
운영체제는 다음과 같은 서비스들을 제공한다
사용자에게 도움이 되는 기능
사용자 인터페이스, 프로그램 실행, 입출력 연산
파일 시스템 조작, 통신, 오류 검출
시스템의 효율적인 연산을 보장하는 기능
자원 할당, 계정 관리, 보호 및 보안
운영체제에 대한 세 가지 종류의 사용자 인터페이스
CLI, GUI, Batch Interface
시스템 호출은 프로세스가 운영체제에게 요청할 수 있는 방법을 제공한다.
요청을 보내기 위해, 프로그램은 일련의 시스템 호출로 번역되는 시스템 API나 표준
라이브러리 함수를 사용한다
시스템 호출에서 매개변수를 전달하는 세 가지 방법
레지스터(Register), 블록(Block), 스택(Stack)
방법론으로부터 정책을 분리하는 것은 운영체제를 설계하는 중요한 원칙 중 하
나이다
운영체제 구조의 네 가지 유형
단순(Simple), 계층(Layered), 마이크로커널(Microkernel), 모듈화(Modular)
Operating System
- 44 -
Fall 2014