운영체제 강의노트 정리 - 운영체제 구조
운영체제 구조
시스템 구성 요소
프로세스 관리
프로세스는 실행 중인 프로그램을 말한다.
프로세스는 그 임무를 수행하기 위해 CPU 시간, 메모리, 파일, 입출력 장치와 같은 자원을 필요로 한다.
자원의 할당은 프로세스의 시작과 동시에 이루어질 수 있으며, 필요할 때마다 이루어질 수 있다.
하나의 프로그램은 그것이 실행되는 동안 여러 개의 프로세스를 생성할 수 있다.
프로세스는 시스템의 작업 단위다.
프로세스는 운영체제 프로세스와 사용자 프로세스로 구분된다.
운영체제는 프로세스 관리와 관련하여, 사용자 및 시스템 프로세스의 생성과 제거 / 프로세스 중지 및 재개 / 프로세스 동기화 / 프로세스 간 통신 / 교착 상태deadlock 처리의 임무가 있다.
주기억 장치 관리
운영체제는 주기억 장치 관리와 관련하여, 기억 공간의 사용 현황 관리 / 적재할 프로세스 선택 / 기억 공간의 할당과 회수의 임무가 있다.
파일 관리
파일은 생성자에 의해 정의된 관련 정보의 모음이다.
운영체제는 다양한 저장 매체에 대한 균일한 논리적 뷰를 제공하여, 저장 장치의 물리적 특성을 논리 저장 단위(파일)로 추상화해준다.
운영체제는 파일 관리와 관련하여, 파일의 생성 및 삭제 / 디렉토리 생성 및 삭제 / 파일 및 디렉토리를 조작하기 위한 기초 연산 제공 / 보조 기억 장치와 파일 간 매핑 / 백업의 임무가 있다.
입출력 관리
운영체제는 다양한 하드웨어 장치의 특성을 사용자에게 숨긴다.
보통 입출력 하위 시스템I/O subsystem을 사용하여 해당 기능을 제공한다.
- 기억 장치 관리 구성 요소 : 버퍼링, 캐싱, 스풀링 등
- 일반적인 장치 드라이버 인터페이스
- 특정 하드웨어를 위한 드라이버
보조 기억 장치 관리
운영체제는 보조 기억 장치 관리와 관련하여, 빈 공간 관리 / 저장 공간 할당 / 디스크 스케줄링(디스크와 관련된 요청의 실행 순서 결정)의 임무가 있다.
네트워킹
운영체제는 네트워크 접근을 파일 접근과 같은 형태로 일반화해준다.
운영체제는 각종 통신 프로토콜을 지원해야 하고, 각종 네트워크 장치 드라이버를 위한 인터페이스를 제공해 주어야 한다.
보호 시스템
운영체제는 각 프로세스를 다른 프로세스로부터 보호해 주어야 한다.
명령 해석기 시스템
명령 해석기는 사용자와 운영체제 간 인터페이스로, 사용자로부터 명령을 받아 실행한다. (Shell)
운영체제 서비스
프로그래머의 편리성을 위해, 프로그램 실행 / 입출력 수행 / 파일 시스템 조작 / 통신(공유 메모리, 메세지 전달) / 오류 검출의 서비스를 제공한다.
시스템의 효율적 운영을 위해, 자원 할당 / 회계accounting / 보호의 서비스를 제공한다.
시스템 호출
프로세스와 운영체제 간 인터페이스를 제공한다.
시스템 호출을 할 때 운영체제에 파일 이름과 같은 추가 정보를 전달해야 한다.
운영체제에 파라미터를 전달하기 위해 레지스터를 통해 직접 전달하거나, 메모리에 저장한 후 그 시작 주소와 크기를 레지스터를 통해 전달하거나, 스택 구조를 이용한다.
시스템 호출의 종류는 다음과 같다.
- 프로세스 제어
- 프로세스 정상 종료end 및 비정상 종료abort
- 프로세스 적재 및 수행
- 프로세스 생성 및 강제 종료terminate
- 프로세스 속성 획득 및 설정
- 시간 대기
- 사건 대기, 사건 발생 알림
- 메모리 할당 및 해제
- 파일 관리
- 파일 생성 및 삭제
- 파일 열기 및 닫기
- 읽기 / 쓰기 / 재배치reposition
- 파일 속성 획득 및 설정
- 장치 관리
- 장치 사용 요청 및 해제
- 읽기 / 쓰기 / 재배치 (장치를 가상 파일로 추상화하여 사용)
- 장치 속성 획득 및 설정
- 장치의 논리적 부착 및 제거
- 정보 유지보수
- 시간 및 날짜 요청
- 시스템 정보 획득 및 설정
- 프로세스, 파일, 장치 속성 획득 및 설정
- 통신 (메세지 전달 모델 / 공유 메모리 모델)
- 통신 연결 생성 및 제거
- 데이터 전송 및 수신
- 상태 정보 전달
- 원격 장치 부착 및 제거
시스템 프로그램
시스템 프로그램은 프로그램 개발과 실행을 위한 편리한 환경을 제공해 준다.
시스템 프로그램의 종류는 다음과 같다.
- 파일 관리 : 탐색기
- 상태 정보 : 등록 정보 기능
- 파일 편집 : 문서 편집기
- 프로그래밍 언어 지원 : 컴파일러, 어셈블러, 인터프리터
- 프로그램 적재 및 실행 : 디버거
- 통신
시스템 구조
단순 구조
처음에 운영 체제는 작고 단순한 시스템에서 출발하여 점점 고급 기능이 추가되었다.
이는 당시 하드웨어의 기능적 제한 때문이었다.
계층적 접근
운영체제를 여러 계층으로 나누어, 상위 계층은 하위 계층의 인터페이스를 사용하게 된다.
가장 하위 계층은 하드웨어이고, 가장 상위 계층은 사용자 인터페이스가 된다.
모듈화를 통하여 하위 계층을 추상화하여, 인터페이스만 그대로 유지하면 하위 계층은 상위 계층과 무관하게 수정될 수 있다는 것이 장점이다.
하지만 계층 구분이 모호하고, 각 계층 간 인터페이스를 통한 작업 수행으로 많은 오버헤드가 존재할 수 있다는 것이 단점이다.
마이크로 커널
커널에 꼭 필요한 기능만 가지도록 구성된 커널이다.
확장이 용이하고, 안전성이 높고(대부분 사용자 모드에서 동작), 신뢰성이 높고, 이식성portability이 높다.
가상 기계
프로세스가 마치 자신만의 프로세서와 메모리를 가지고 있는 것처럼 생각할 수 있도록 운영체제를 설계할 수 있다.
이러한 접근 방식을 가상 기계VM, Virtual Machine이라고 한다.
가상 기계 방식에서 모든 프로세스에게 컴퓨터의 복사본이 제공된다.
CPU는 여러 가상 기계 사이에 다중 프로그래밍 되므로 가상 기계의 속도는 더 느려질 수 있다.
구현
일반적으로 기계는 사용자 모드와 모니터 모드를 제공한다.
가상 기계를 구현하는 소프트웨어는 모니터 모드에서 동작 가능하나 실제 가상 기계는 사용자 모드에서 동작해야 한다.
가상 기계 역시 가상 기계만의 사용자 모드와 모니터 모드를 제공해야 하나, 실제로는 모두 사용자 모드에서 동작해야 한다.
장점
가상 기계는 서로 독립적이므로 시스템 자원 보호 측면에서 유리하며, 자원 공유는 어렵다.
실제 시스템에 영향을 주지 않고 프로그램을 개발할 수 있다.
호환성 문제를 해결하는 수단으로 사용될 수 있다.
자바
Java 언어
자바 프로그램은 JVM(Java Virtual Machine)을 사용하며, 이 때문에 자바 프로그램은 JVM이 설치된 어떠한 컴퓨터에서도 실행될 수 있다.
자바 컴파일러는 각 자바 클래스마다 컴퓨터 구조와 독립된 바이트코드bytecode를 생성하며, 이 코드는 JVM에서 실행된다.
JVM은 클래스 로더class loader, 클래스 확인자class verifier, 자바 인터프리터java interpreter로 구성되어 있다.
JVM은 가비지 컬렉션garbage collection 방식으로 메모리를 관리한다.
시스템 설계 및 구현
설계 목표
사용하는 하드웨어, 시스템의 종류에 따라 우선적으로 결정된다.
사용자 지향 목표 : 편리성, 이해 용이성, 신뢰성, 빠른 처리 속도
시스템 지향 목표 : 유연성(메커니즘과 정책의 분리), 신뢰성, 효율성
구현
초기에는 어셈블리어로 구현하였으나 현재는 C/C++을 사용하고, 성능에 민감한 부분만 어셈블리어를 사용하여 구현한다.
시스템 설치
각 특정 사이트에서 동작하도록 구성하는 과정
CPU의 종료와 개수, 주기억 장치의 크기, 부착된 장치, 운영체제 옵션(CPU 스케줄링 방법 등)을 시스템 설치시 결정한다.
설치 후 컴퓨터를 다시 시작하면, 컴퓨터는 커널을 주기억 장치에 적재하고 실행하며, 이를 부팅booting이라고 말한다.
이를 해주는 프로그램을 부트스트랩 프로그램 또는 부트스트랩 로더bootstrap loader라고 말한다.