이 게시글은 <쉽게 배우는 운영체제> (함호종, 원종권 지음)을 공부하며 적은 개인 노트입니다.
1. 운영체제의 개념
운영체제: 컴퓨터 사용자와 컴퓨터 하드웨어 간 인터페이스를 담당하는 프로그램
1.1 운영체제의 역할
컴퓨터 시스템의 구성요소: 컴퓨터 사용자, 소프트웨어, 하드웨어
- 컴퓨터 사용자: 컴퓨터를 사용하는 사람, 장치, 컴퓨터
- 하드웨어: 연산을 위한 기본 자원을 제공하는 CPU(프로세서), 메모리, 다양한 장치 등
- 소프트웨어: 컴퓨터가 기능 수행하는데 필요한 프로그램
- 유틸리티: 컴퓨터의 처리 과정을 보조하여 시스템을 유지하고 성능을 개선하기 위한 프로그램
- (예) 컴파일러, 편집기, 압축(해제) 프로그램
- 응용 프로그램보다 작은 프로그램
- 응용 프로그램: 문제를 해결하기 위해 만들어진 프로그램
운영체제의 역할
- 조정자
- 다른 프로그램이 작업할 수 있는 환경 제공
- 직접 작업은 수행하지 않지만, 작업이 완료될 수 있도록 조정자 역할 수행
- 자원 관리(할당)자
- 각 응용 프로그램 실행에 필요한 자원을 관리 및 할당한다
- 다른 응용 프로그램에서 동시에 동일한 자원을 요구하면 이를 공정/효율적으로 운영하기 위해 결정
- 문제 해결과 사용자 프로그램 제어
- 입출력 장치를 동작시키고 제어한다
- 컴퓨터 시스템의 오류/부적절 사용을 방지하기 위해 응용 프로그램의 실행을 제어한다
- 기능
- 하드웨어와 사용자 간 인터페이스 정의
- 사용자들이 하드웨어를 공동으로 사용할 수 있게 해줌
- 사용자들이 데이터를 공유할 수 있게 해줌
- 사용자 간 자원관리자 역할
- 입출력 보조
- 오류 처리
1.2 자원 관리
자원: 메모리, 프로세스, 장치, 파일 등 시스템 구성요소
운영체제의 역할:
- 응용 프로그램의 메모리 공간, 시간 등의 자원에 대한 스케쥴링 및 할당
- 제한된 자원을 효율적으로 사용하기 위한 이용율 증가
- 오버헤드 최소화
- 각 응용프로그램의 수행 영역 보호
프로세스 관리
프로세스
시스템: 프로세스의 집합
- 운영체제 프로세스와 사용자 프로세스를 포함한다
- 운영체제 프로세스: 시스템 코드를 수행하는 프로세스
- 사용자 프로세스: 사용자 코드를 수행하는 프로세스
운영체제가 프로세스를 관리하는 방법
- 프로세스와 스레드 스케쥴링
- 프로세스 생성과 제거, 중지와 재수행
- 프로세스 동기화 및 통신을 위한 기법 제공
- 교착상태를 방지하는 기법 제공
메모리 관리
메모리: 메인 메모리와 보조 기억 장치
- 메인 메모리: 프로세서가 직접 주소로 지정할 수 있는 메모리
- 프로세서가 명령어를 수행하려면 명령어가 메인 메모리에 있어야 함
- 프로그램이 절대 주소로 맵핑되어 메인 메모리에 저장됨
- 프로세서 이용률과 컴퓨터 응답 속도를 높이려면 메모리에 프로그램을 몇개 저장하고 있어야 한다
- 다중 프로그래밍 >> multi-programming system
- 보조기억 장치: 메인 메모리에 미처 저장하지 못한 내용을 저장하는 디스크
- 메인 메모리 관리
- 메모리의 어느 부분이 사용되는지, 누가 사용하는지 점검
- 메모리 공간에 어떤 프로세스를 저장할지 결정
- 메모리 공간을 할당/회수하는 방법 결정
- 보조기억 장치 관리
- 비어 있는 공간 관리
- 저장 장소 할당
- 디스크 스케쥴링
장치 관리
- 임시 저장 시스템
- 일반적인 장치 드라이버 인터페이스
- 특정 하드웨어 장치를 위한 드라이버
파일 관리
운영체제는 효율성을 위해 단일화된 정보 저장 형태를 유지 제공한다
- 파일 생성과 제거
- 디렉터리 생성과 삭제
- 보조기억 장치에 있는 파일의 맵핑
- 안전한 저장 매체에 파일 저장
기타 관리
- 보호 시스템: 운영체제의 관리 하에 적절한 영역 및 자원을 보호
- 네트워킹: 네트워크를 관리한다
- 명령 해석기: Command interpreter
1.3 운영체제의 목적
- 사용자에게 편리한 환경 제공: GUI 등
- 자원관리 및 오류 제어
- 시스템 성능 향상
- 처리능력 (throughput): 시스템의 생산성. 단위 시간당 처리하는 작업량
- 신뢰도 (reliability): 하드웨어/소프트웨어가 실패 없이 주어진 기능을 수행할 수 있는 능력
- 응답 시간: 사용자가 시스템에 작업을 의뢰한 후 반응 얻을 때까지의 시간
- 시분할 방식 시스템) 응답시간
- 일괄 처리 시스템) Turn around time
- 사용가능도 (availability) 증대
- 고장/오류 시에도 시스템 전체를 중단시키지 않고 운영한다
3. 운영체제의 서비스
3.1 사용자 서비스
사용자 서비스: 프로그래머가 프로그래밍 작업을 쉽게 수행할 수 있도록 제공되는 서비스
-
사용자 인터페이스: 사용자와 컴퓨터 간 상호 작용 공간
- 그래픽 사용자 인터페이스 (GUI)
- 명령 라인 인터페이스 (Command-Line interface, CLI)
- 웹 사용자 인터페이스 (Web User Interface)
- 웹 브라우저 프로그램을 사용
- 웹페이지를 통해 입력을 수락하고 생성하여 출력을 제공하는 GUI 영역의 인터페이스
-
프로그램 실행: 컴퓨터에 설치된 프로그램을 열거나 실행한다
- 파일의 내용을 메모리에 적재한다
- 프로그램을 실행한다
- 프로그램 실행을 정상/비정상적으로 끝낸다
-
입출력 작업
- 사용자 프로그램은 장치에 접근할 수 없기 때문에 운영체제가 입출력 동작을 위한 방법을 제공해야 한다
-
파일 시스템 조작
- 파일은 디스크의 블록에 저장된다
- 파일을 삭제하면 파일정보가 제거되고, 할당된 블록은 자유로워진다
- 적절한 파일 접근권한 관리가 필요하다
-
통신: 프로세스 간, 또는 시스템 간 통신
-
오류 탐지: 운영체제는 모든 하드웨어 및 소프트웨어에서 오류를 항상 탐지해야 한다
- 하드웨어) 모든 데이터가 전송 도중 손상되지 않았는지 확인
- 소프트웨어) 일관성 있는 계산을 위한 오류 조치
3.2 시스템 서비스
시스템 서비스: 시스템 자체의 효율적인 동작을 보장하는 기능
- 자원 할당
자원: 프로세서 사이클, 메인메모리, 파일 저장 장치, 입출력 장치 등
다수의 사용자/작업을 운영하기 위해서는 운영체제가 자원을 각각 할당/관리해야 한다
- 계정
각 사용자가 어떤 컴퓨터 자원을 얼마나 사용하는지 정보를 유지/추적한다
- 보호와 보안
작업간 영역을 보호하고, 작업 도중 방해받지 않도록 보장한다
보호:
- 시스템 호출을 위해 전달된 모든 매개변수의 타당성 검사
- 시스템 자원에 모든 접근을 제어하도록 보장
보안:
- 잘못된 접근 시도로부터 외부 입출력 장치 방어
- 외부자에 대한 사용자 인증을 필요
3.3 시스템 호출
시스템 호출(System call): 실행 중인 프로그램과 운영체제 간의 인터페이스
- 사용자 프로그램은 시스템 호출로 운영체제의 기능에 접근한다
- API: Application Programming Interfaces
시스템 호출 방법
-
프로그램에서 명령/서브 루틴의 호출 형태로 실행한다
-
시스템에서 명령 해석기를 통해 대화 형태로 호출한다
시스템 호출 종류
- 프로세스 제어: 종료/취소, 적재/수행, 프로세스 생성/종료, 프로세스 속성 획득/지정, 대기, 대기/신호 이벤트, 기억 장치 할당 및 해제
- 파일 조작: 파일 생성/삭제, 오픈/닫음, 읽기/쓰기/재배치, 파일 속성 획득/지정, 논리적 부착
- 장치 조작: 장치 요구/해제, 읽기/쓰기/재배치, 장치 속성 획득/설정, 논리적 부착, 장치 제거
- 정보 관리: 시간 및 일자의 설정/획득, 데이터의 설정/획득, 프로세스/파일/장치 속성의 설정/획득
- 통신: 통신 연결의 생성/제거, 메시지의 송수신, 상태 정보 전달, 원격장치의 부착/제거
4. 운영체제의 구조
4.1 단순구조 운영체제 (Monolithic structure)
단순 구조 운영체제: 최소 공간에서 가장 유용한 기능을 제공하도록 작성된 보편적인 운영체제 구조
- 운영체제의 모든 기능 및 구성요소를 커널에 포함한다
- 기능/구성요소는 효율적인 모듈로 구분되지 못한다
- 인터페이스와 기능 수준의 명확한 분리가 어렵다
- 사용자 프로그램의 실패가 전체 시스템 충돌의 원인이 될 수 있다
- 여러 하드웨어에 의해 제한된 구조다
4.2 계층 구조 운영체제 (Layered structure)
계층 구조 운영체제: 유사한 기능을 묶어 계층화해서 모듈 구조로 변화했다
아래 사진은 계층 접근이다
- 가장 낮은 계층 (0층)은 하드웨어
- 최상의 계층 (N층)은 사용자 인터페이스
계층 접근 방식의 장점
- 구조와 디버깅이 간단하다
- 각 계층은 각각 낮은 수준의 기능 및 서비스를 사용하도록 선택된다 >> 디버깅 및 시스템 검증 단순화
- 계층 0: 프로세서의 기본 다중프로그래밍 제공
- 인터럽트가 발생하거나 시간이 종료되면 프로세스간 스위칭과 프로세서의 할당을 처리한다
- 계층 1: 메모리 관리
- 메인 메모리에 프로세스에 대한 공간을 할당한다
- 계층 2: 각 프로세스와 운영자 콘솔 간의 통신 처리
- 계층 3: 입출력 장치를 관리하고, 장치들로부터 스트림 정보를 버퍼링 처리한다
- 계층 4: 사용자 프로그램
- 프로세스, 메모리, 콘솔, 입출력 관리에 대해 걱정할 필요가 없다
- 계층 5: 시스템 운영자 프로세스
스트림 정보: 일련의 데이터가 한 곳에서 다른 곳으로 직렬로 이동하는 상태이자 프로그램이 주변 장치와 통신하는 수단
표준 스트림: 컴퓨터 프로그램과 그 환경(I/O 장치 등) 사이에 미리 연결된 입출력 통로 (stdin: standard input, stdout: standard output, stderr: standard error)
버퍼링: 운영체제의 기능 중 하나로, 상주 모니터 혹은 장치 드라이버에 시스템 입출력 버퍼를 사용하여, 입출력 장치에 유휴시간이 없도록 프로세서의 연산 과정과 함께 작업의 입출력을 동시에 수행하는 것
- 각 계층은 하위 수준에 의해 구현 및 운영됨
- 각 계층은 이러한 작업이 구현되는 방식을 모두 알 필요는 없음
- 각 계층은 특정 데이터 구조, 운영 등을 숨긴다
계층 접근 방식의 단점: 높은 계층은 차례로 낮은 계층에 대한 작업을 호출해야 돼서, 계층 간 데이터 전달 때문에 추가 오버헤드의 시스템 호출이 발생한다
4.3 마이크로 커널 구조 운영체제
커널
- 커널 공간과 사용자 공간으로 구분된다
- 커널 공간은 사용자 공간은 없는 권한을 가진다
커널의 종류: 단일(monolithic) 커널과 마이크로(micro) 커널
Monolithic kernel
- Unix, MS-DOS, 초기 Mac 운영체제의 커널
- 커널 공간: 시스템 서비스를 실행한다
- 시스템 서비스: 프로세스 관리, 메모리 관리, 인터럽트 처리, 입출력 통신, 파일 시스템 등
- 사용자 공간: 운영체제의 나머지 부분 (라이브러리와 응용 프로그램)
- 장점:
- 각 컴포넌트 간 커뮤니케이션이 효율적이다.
- 커널이 모든 시스템 서비스들을 관리 했기 때문에(모놀리식 커널이기에) 개발자는 커널이 제공하는 함수만 사용해서 쉽게 할 수 있다
- 단점:
- 디바이스 드라이버를 추가/삭제 하려면 커널을 재빌드 해야 한다
- 새로운 커널의 컴파일은 시간과 많은 메모리를 사용한다
- 하나가 죽으면 전체 시스템이 죽는다.
- 커널 공간에 모든 서비스를 포함한다 >> 커널 크기 증가 >> 확장성 부족 >> 유지보수 어려움
- 이 문제를 해결하기 위한 것이 마이크로 커널이다
Micro kernel
Monolithic kernel에서의 변화
- 입출력 제어와 기본 프로세스 통신 커널을 줄였다
- 다른 시스템 서비스는 정상적인 프로세스의 형태, 즉 서버로 불리는 사용자 공간에 있도록 한다
- 서버가 더이상 커널 공간에서 실행되지 않기 때문에 사용자 프로세스가 특권모드가 될 수 있도록 문맥교환(Context switching)이 필요하다
마이크로 커널: 핵심적인 기능(스케줄링, 메모리 관리 등등)만 커널에 담고 나머지는 제외해 가볍게 만든 커널
참고: