CS/OS

[OS] 운영체제 기초

창문닦이 2020. 2. 29. 13:19

일하면서 리눅스 서버를 운영하다 보면 리눅스 기반 기술, 운영기술의 필요성을 절실히 느낀다.

리눅스를 공부할수록 운영체제에 대한 기초 지식의 망각(?)을 느껴 정리하고자 포스팅한다. 

[운영체제 개요]

1. 운영체제의 이해

운영체제란? 

사용자가 컴퓨터 시스템을 손쉽게 사용하도록 하고 시스템 자원(기억장치, 프로세서, 입출력 장치, 정보, 네트워크 및 데이터 등)을 효율적으로 관리할 수 있도록 하는 프로그램들의 집합이다. 운영체제는 사용자와 컴퓨터 간의 인터페이스 역할을 담당한다. 운영체제는 각 프로그램을 유기적으로 결합시켜서 시스템 전체의 생산성을 향상할 목적으로 설계된다.

운영체제를 역할 중심으로 구분한다면 자원할당자와 제어 프로그램으로 구분할 수 있다. 

  • 자원할당자(Resource Allocator) : 운영체제가 시스템의 모든 자원들을 할당시킨다.

  • 제어 프로그램(Control Program) : 컴퓨터의 부적절한 이용과 오류를 방지시키기 위해서 사용자의 프로그램의 실행을 통제한다.

 

운영체제의 목적

  • 효율적 사용 (efficient use) : 컴퓨터 자원의 효율적인 활용을 보장한다.

  • 사용자 편리성 (user convenience) : 컴퓨터 시스템의 편리한 사용법을 제공한다.

  • 비간섭 (noninterference) : 운영체제 사용자들의 활동에 간섭을 방지한다.

 

운영체제의 주요 역할

  • 컴퓨터의 하드웨어를 제어한다. 

  • 사용자들 간의 하드웨어 자원을 공유할 수 있도록 한다.

  • 시스템 자원 스케쥴링

  • 입출력 기능 지원

  • 응용 프로그램의 작성과 실행을 편리하게 한다.

  • 오류를 막고 복구 지원

  • 데이터의 조직화, 네트워크 통신 처리 기능을 수행한다. 

  • 편리한 사용자 인터페이스를 제공한다

 

운영체제를 구성하는 요소

  • 제어 프로그램 : 시스템을 운영하기 위한 기능을 수행하는 프로그램이다. 감시 프로그램, 데이터 관리 프로그램, 작업 관리 프로그램 등이 해당된다.

  • 처리 프로그램 : 컴퓨터가 실제적으로 작업을 수행하기 위한 기능을 지원하는 프로그램이다. 언어 번역 프로그램. 서비스 프로그램, 사용자가 작성한 문제 처리 프로그램 등과 같이 컴퓨터 제작 회사로부터 제공된 프로그램이 해당된다. 

시스템 성능을 나타내는 4가지 요소

  • Throughput : 단위 시간당 처리 능력을 나타낸다.

  • Turnaround Time : 작업이 제출되어서 결과를 얻을 때까지의 총 소요 시간이다.

  • 신뢰도(Reliability) : 시스템이 얼마나 정확하게 작동되는지를 나타낸다. 

  • 사용 가능도(Availability) : 시스템에서 곧 사용할 수 있는 정도를 나타낸다. 

운영체제 시스템의 구조 

  • 커널(Kernel) : 모든 운영체제에 포함되어 있다. 운영체제의 가장 핵심적인 부분을 차지한다. 항상 메모리에 상주하고 장치들을 관리한다.

  • 쉘(Shell) : 커널과 사용자, 커널과 애플리케이션들과의 대화 수단이 되는 프로그램이다.

  • 파일 시스템(File System) : 데이터 및 장치관리의 객체가 되는 파일 시스템 구조체이다.

  • 시스템 소프트웨어(System Software) : 커널 외에 시스템 자원 관리를 위한 소프트웨어이다.

  • 애플리케이션(Application) : apache, mysql, vsftpd 등과 같이 운영체제에 기본적으로 포함되어 제공되는 수많은 응용 프로그램들이다. 

운영체제 분류

  • 가장 좁은 의미의 운영체제 : 커널

  • 보편적인 의미의 운영체제 : 커널 + 쉘 + 파일 시스템

  • 가장 넓은 의미의 운영체제 : 커널 + 쉘 + 파일 시스템 + 시스템 소프트웨어 + 애플리케이션

  • 운영체제가 제대로 운영되려면 커널, 쉘, 파일 시스템은 갖추어야 한다.

 

2. 운영체제의 특징

최근 운영체제들의 특성을 정리하면 다음과 같다.

  • 다중 사용자 시스템(Multi-user System) : 동시에 여러 사용자가 접속하여 시스템을 사용할 수 있도록 한다. 자원의 공유가 자유롭고 각 사용자마다 할당된 자원을 통해 독립적으로 작업을 진행할 수 있다.

  • 다중 작업 시스템(Multi-tasking System) : 사용자가 여러 작업을 동시에 수행할 수 있다. 각 작업은 CPU 점유를 정해진 시간만큼 번갈아 사용한다(시분할 방식). 고속의 실행 속도 구현과 자원 관리 기능이 고도화되면서 각각의 작업은 독립적인 수행이 가능하다.

  • 강력한 네트워킹 : 네트워크를 통해 시스템 간에 정보를 공유하고 분산 처리를 수행하며 원격 서비스의 처리가 가능하다. 별도의 소프트웨어가 없어도 네트워크에 연결되고 다른 컴퓨터에 접속할 수 있는 기능이 필수적이다.

  • 편리한 사용자 인터페이스 : GUI 환경 제공 및 여러 화면을 동시에 사용할 수 있는 멀티 스레딩과 멀티미디어를 활용한 작업이 가능하다.

  • 계층적 파일 관리 시스템 : 파일 관리를 위하여 계층적 디렉토리 구조를 사용해서 디렉 토리 및 파일 관리가 용이하고 정보처리가 매우 효율적이다. 권한, 보안 기능, 고용량 고성능의 저장 장치를 지원한다.

  • 가상 메모리 : 디스크의 가상 메모리를 통해 실제 RAM 용량의 부족을 해결하거나 주기억 장치의 용량을 증대하는 효과를 제공한다. 각 응용 프로그램마다 공통 루틴을 별도 저장하는 것을 방지하여 시스템의 디스크 공간 활용도를 높여준다.

  • 고성능의 프로세서에 최적화 : 전원 및 자원 관리가 매우 효율적이고 프로세서의 성능이 최대한 발휘될 수 있는 실행환경을 제공한다. 

  • 개방형 운영체제 및 뛰어난 이식성 : 수많은 운영체제들과의 연결 및 자료 호환이 자유롭고 특정 시스템에 종속되지 않는다. 하드웨어들에 대하여 자유롭도록 개방형 운영체제로 변하고 있다. 

3. 운영체제의 역사

연도별 역사 정리 >>> 운영체제의 역사가 잘 정리된 블로그는 여기!

연도 특징 주요 내용
1940s 운영체제가 없음
한 비트씩 천공카드를 뚫어서 조작
기계어 사용
1950s 일괄 처리 시스템

단일 흐름 일괄 처리, 작업간의 전이 문제 중시. 오류 복구 처리. 운영체제의 주요 기능들은 프로그래머 취향에 따라 응용소프트웨어에 포함되기도 하고 않기도했다.

1960s

다중 프로그래밍 시스템(IBM이 빅 블루로 성장)

시분할 시스템

실시간 처리 시스템

픽 운영체제

가상 기억 장치, 계층적 디렉토리를 갖는 파일링 시스템 개념 도입.

고급언어로 운영체제 작성

데이터 통신 지원용 운영체제

운영체제도 SW공학이 도입

1970s

범용 시스템 개념 도입

다중 모드 시스템(네트워크의 중요성 부각)

일괄 처리, 시분할 처리, 다중 모드

실시간 처리, 다중 처리를 한 시스템에서 모두 제공

소형 컴퓨터가 시장에 등장

CP/M, MS-DOS, 최초의 GUI 운영체제.

1980s

마이크로컴퓨터 운영체제(소형 컴퓨터)

사용자에게 친절한 시스템 개념
컴퓨터 사용자의 증가로 사용자 인터페이스가 발전

가상 기억 장치

통신망 서비스 운영체제

데이터베이스 중요성 인식

1990s

분산 처리 개념

네트워크 개념

개인용 컴퓨터

소규모 서버

소규모 서버

보안과 인증 강화

에이전트 프로그램의 활성화

 

기능별 운영체제 유형

  • 다중 교환(Multi-switching) : 다수의 작업이 동시 실행되나 포그라운드 프로그래만 동작하는 형태이다.

  • 단일 작업(Single-tasking) : 컴퓨터가 한 번에 하나의 작업만 처리하는 형태이다.

  • 다중 작업(Multi-tasking) :  한 사용자가 여러 개의 작업을 동시에 수행하는 시스템이다.

  • 다중 사용자(Multi-user) : 단일 프로세서 시스템에서 여러 사용자의 프로그램이 실행되는 것이다.

  • 대화형 처리(Interactive Processing) : 사용자가 단말기에서 대화형으로 작업을 처리하는 것으로 시분할 처리 기능이 필요하다.

  • 일괄 처리(Batch Processing) :  여러 개의 작업을 묶어 한꺼번에 처리하는 것으로 작업 처리 효율이 높다.

  • 실시간 처리(Real Time Processing) : 작업의 처리가 지연 없이 즉각적으로 처리되는 것으로 신속한 반응을 요구한다.

  • 가상 기계(Virtual Machine) : 컴퓨터 시스템을 마치 여러 대의 작은 컴퓨터 시스템이 있는 것처럼 분할하여 만든 것이다.

  • 분산 처리(Distributed Processing) : 통신선으로 여러 시스템을 연결하고 작업을 나누어서 처리한다. 고속의 통신선과 고신뢰도를 요구하는 것으로 마이크로프로세서의 사용이 필요하다.

  • 병렬 계산(Parallel Processing) : 많은 프로세서들이 동시에 작동한다. 

 

4. 시스템 프로그램

시스템 프로그램이란 사용자가 컴퓨터를 사용할 때 편리하게 이용할 수 있도록 기능을 제공하는 프로그램들을 의미한다. 종류를 살펴보자.

  • 언어 번역 프로그램 : 원시 응용 프로그램을 컴퓨터 시스템에서 사용할 수 있도록 목적 프로그램으로 번역한다.

    1. 어셈블러(Assembler) : 저급 언어(사람이 이해하기 어려운 컴퓨터 언어에 가까운 언어)인 어셈블리어로 작성된 프로그램을 기계어로 번역하는 언어 번역 프로그램이다. 어셈블러의 결과는 어셈블리어로 작성된 프로그램을 로더가 실행할 수 있도록 목적 프로그램으로 만들어준다. 

    2. 컴파일러(Compiler) : 고급언어(FORTRAN, COBOL, ALGOL, C와 같은 언어)로 된 소스코드 프로그램을 분석해서 이에 대응되는 목적 코드 프로그램을 생성한다. 컴파일러는 소스코드 프로그램을 분석하고 문법적인 오류를 찾는다. 

    3. 인터프리터(Interpreter) : BASIC, LISP, APL, SNOBOL 등의 언어로 작성된 원시 프로그램을 번역하는 프로그램이다. 한 줄씩 번역하며 실행까지 바로 수행한다.(=대화식 처리를 하므로 목적 프로그램이 생성되지 않는다.)  

 

  • 매크로 프로세서(Macro Processor) : 자주 사용하는 루틴에 대한 확장 코드를 생성한다. 

    1. 매크로 호출을 매크로 정의로 바꾸어주는 프로그램이다. 

    2. 매크로 : 어떤 코드에 대한 축약(or 이름)

    3. 시스템에서 자주 사용되는 기능을 매크로로 미리 작성하고, 필요할 때 호출하면 소스코드 프로그램을 만들어준다.

  • 로더(Loader) : 목적 프로그램을 실행하기 위해서 메모리에 적재하고 배치 주소를 옮긴다(=Link-edit).

    1. 목적 프로그램에 시스템 라이브러리와 로드 모듈을 추가해서 실행 가능한 형태로 만들어준다.

    2. 어떤 프로그램을 실행하기 위해 그 프로그램의 명령문들과 데이터들을 주기억장치에 놓아두는(=Binding) 프로그램이다.

    3. 절대 로더 : 기계어 코드 프로그램이 가라키는 정확한 번지에 명령문과 데이터를 적재한다.

    4. 재배치 로더 : 로드할 당시 주기억 장치 내의 사용 가능한 어느 공간이라도 적재가 가능하다.

  • 운영체제(OS) : 시스템의 자원을 관리하고 프로그램의 실행 순서를 정하며, 주변 장치 등을 사용할 수 있도록 지원한다.

    1. 기억장치, 프로세서, 주변장치, 정보와 같은 자원들과 서비스의 할당과 관련된다.

    2. 트래픽 컨트롤러, 스케줄러, 기억장치 관리 모듈, 입출력 프로그램과 파일 시스템 등의 자원들을 관리하는 프로그램이 포함된다.

 

5. 기억 장치 관리

기억 장치 : 프로그램이나 데이터를 저장하는 부분

  • 주기억 장치 : 휘발성 메모리로 대량의 데이터를 장기적으로 저장할 수 없다. CPU가 프로그램과 데이터를 즉각적으로 실행하고 참조하기 위해서는 주기억장치에 저장되어 있어야 한다.

  • 보조 기억 장치 : 많은 양의 프로그램과 데이터를 대량으로 저장하기 위한 디스크, 데이트, 광디스크 등

  • 캐시 기억 장치

    1. 캐시는 CPU와 주기억장치 사이에 위치해서 주기억 장치의 정보들을 고속으로 CPU에 제공하는 최상위 계층의 메모리이다.

    2. 가격이 비싸고 용량이 작다.

    3. 접근 속도가 가장 빠르고 보통 주기억 장치보다 용량이 적다.

    4. CPU가 실제적으로 참조하는 메모리이다. 

  • 기억장치 관리를 위한 요구사항 

    1. 재배치(Relocation) : 프로그램의 주소를 동적으로 재배치한다.

    2. 보호(Protection) : 다른 사용자의 영역을 허락없이 참조하는 것을 방지한다.

    3. 공유(Sharing) : 여러 프로세스들이 기억장치의 특정 부분을 같이 참조할 수 있다.

    4. 논리 구조(Logical Organization) : 정보 블록의 크기가 일정한 모듈과 크기가 일정하지 않은 세그먼테이션으로 구성한다.

    5. 물리 구조(Physical Organization) : 주기억 장치, 보조기억장치, 휘발성 메모리, 비휘발성 메모리로 특성이 구분된다.

  • 기억장치 관리 기법

    1. 호출 기법(Fetch) : 보조 기억 장치로부터 페이지나 세그먼트를 인출한다. (ex. 요구 호출, 예상 호출)

    2. 배치 기법(Placement) : 액세스한 페이지나 세그먼트가 적재될 위치(주기억 장치)를 결정한다. (ex. 최초 적합, 최적 적합, 최악 적합)

    3. 교체 기법(Replacement) :  새로운 프로그램이나 데이터를 적재하기 위해 기존 페이지나 세그먼트 중 하나를 제거한다. (교체 알고리즘 ex. Random, FIFO, LRU, LFU, NUR, Second Chance, Locality)

 

분할 기억 장치 관리 : 여러 개의 프로그램을 시스템에 적재할 때 기억장소의 분할과 관리 방법

  • 다중 연속 고정 분할 방법 : 다중 프로그래밍 환경에서 절대 번역과 적재를 할 때 고정된 분할을 이용한다. 각 분할의 경계는 경계 레지스터가 하한과 상한의 주소를 가리키며 분할영역의 크기를 나타낸다. 초기의 다중 프로그램에서 사용했다.

    • 절대 번역 : 프로그램이 주기억장치에 적재될 때 프로그램이 반드시 위치해야 하는 주소를 고정한 것

  • 다중 연속 가변 분할 방법 : 각 작업의 크기에 따라 분할 영역을 할당한다. 초기 분할 이후에는 주기억 장치에 작은 분할이 발생해서 나중에 큰 기억장소가 필요할 때 기억 장소 집약(Storage Compaction)이 필요하다.

  • 기억 장소 배치 기법 : 시스템에 새로 적재되는 프로그램과 데이터를 주기억 장치의 어디에 배치할 것인지를 결정하는 기법이다. 

    1. 최초 적합 방법(First-Fit) : 가용 공간 중에서 첫 번째 기억 공간을 할당한다. 

    2. 최적 적합 방법(Best-Fit) : 가용 공간을 정렬해서 필요로 하는 공간과 같거나 가장 작은 기억 공간을 할당한다.(낭비하지 않으려고!) 

    3. 최약 적합 방법(Worst-Fit) : 가용 공간을 내림차순으로 정렬하고, 가용 공간 중 가장 큰 것을 할당한다.

  • 단일 연속 기억 장치 : 한 명의 사용자에게 연속된 기억 공간을 할당한다. 초기의 운영체제에서 사용했고 방법이 매우 단순하다.

재배치 분할 기억 장치 관리

  • 기억 장치를 할당하고 재할당하는 과정을 반복하면 수많은 파티션들로 인해 아주 작은 기억 공간들(조각)이 발생한다. 이러한 공간들을 모아서 커다란 기억 공간으로 만드는 작업을 압축(Compaction), 쓰레기 수집(Garbage Collection)이라 한다.

  • 압축(Compaction, Recompaction) : 분할된 기억 장소중에 남은 부분인 작은 조각들을 기억 장소에 모으는 작업이다. = Garbage Collection

  • 재배치 레지스터 : 재배치 레지스터는 다중 분할된 메모리를 관리하고 각 프로세스에 시작 주소와 경계에 대한 정보를 갖는다. 필요에 따라 분할 기억 장소의 경계를 나타내는 베이스-경계 재배치 레지스터(Base-Bound Relocation Register)의 값을 조정해서 프로세스의 적재 위치를 동적으로 재배치할 수 있다.

  • 집약 : 압축 기법을 이용해서 산재된 작은 기억 공간을 큰 가용 기억 장소로 만드는 작업이다. 이 작업을 진행하려면 단점도 매우 많다. 사용 가능한 시스템 자원을 소비해야한다. 집약하는 동안 시스템은 모든 작업을 중지해야 한다. 재배치 관련 정보의 유지 관리가 복잡하다. 만약 빠르게 교체되는 작업이라면 집약을 위해 소모되는 자원이 크다.(배보다 배꼽이 큰 격) 

 

가상 기억 장치(Virtual Memory)

  • 페이지 기억 장치 관리 : 가상 기억 공간을 구현하기 위해서 메모리를 일정 크기의 페이지 프레임으로 분할하고 페이지 맵을 통해 실제 주소 공간, 가상 주소 공간을 매핑(사상, mapping)하는 관리 기법이다.

  • 세그먼트 기억 장치 관리 : 페이지 기억 장치 관리를 크기가 다른 세그먼트 프레임으로 관리하는 방법이다. 내부 단편화를 줄이고 세그먼트 맵을 통해 고속으로 주소를 계산 가능하다. 

  • 세그먼트의 소프트웨어 알고리즘 : 세그먼트 기법은 일정한 크기의 페이지만 취급하므로 내부 단편화와 페이지 부재로 인한 적재, 교체로 스레싱이 발생해서 속도 저하 문제를 해결한다. 

  • 요구 세그먼트 방법 : 해당 세그먼트에 대한 요청이 있는 경우에만 세그먼트를 교체하는 방법이다. 

  • 교환 : 페이지나 세그먼트를 서로 맞바꾸기 위한 알고리즘

    1. Roll-Out : 교체되는 페이지를 제거하는 것이다.

    2. Roll-In : 신규 페이지를 적재하는 것이다.

    3. Context-Switch : 페이지를 서로 교체하기 위해 문맥을 저장하고 재적재하는 것이다.

요구 페이지 기억 장치 관리 

  • 요구 페이지 방법 : 특정 페이지에 대한 액세스 요구가 발생하면 그떄 해당 페이지를 기억 장소에서 읽어들이는 방식이다.

  • 요구 페이징의 활용 : 요구 페이징은 필요한 프로그램만 메모리에 적재한다. 페이지에 대한 요구가 발생한 후 해당 페이지 프레임을 액세스한다. 기억 공간의 낭비가 없지만 빈번하게 페이지 부재가 발생해서 실행속도가 느리다. 

  • 요구 페이징 시스템 : 페이지 부재가 매우 적게 발생하도록 유지해야한다. 페이지 부재가 발생하면 프로그램의 실행이 급격히 감소해 액세스 시간과 총처리시간이 크게 증가한다.

  • 페이지 부재 시 발생 과정

    1. MMU(Memory Management Unit)는 페이지 부재 인터럽트 신호를 발생시킨다.

    2. 인터럽트가 페이지 부재인지를 결정한다.

    3. 페이지 참조가 합법적이고 디스크상에 페이지의 위치를 결정한다.

    4. 디스크의 해당 페이지 블록을 read 액세스

    5. 읽은 페이지 블록의 전송 시작

    6. 디스크에서 read 전송 완료 인터럽트

    7. 인터럽트가 디스크에서 발생되는지를 결정

    8. 요구된 페이지가 지금 기억 장소에 있는지를 보기 위해서 PMT와 다른 테이블을 결정

    9. 사용자 레지스터들, 프로그램 상태와 새로운 PMT를 다시 저장하고 그때 인터럽트된 명령을 재개 

 

 

페이지 대체 알고리즘 : 페이지 부재가 발생할 때 새로운 페이지를 적재하기 위해 기존의 페이지를 제거하는 알고리즘.

  • 최적화 원칙(principal of optimality) : 가장 오랫동안 사용되지 않을 페이지를 교체한다. (예측하는 것이 불가능하기에 구현할 수 없음)

  • 무작위 페이지 교체(random page replacement) : 임의의 페이지를 교체한다. (가장 간단)

  • FIFO(First In First Out) : 가장 먼저 적재된 페이지를 제거한다. (페이지 프레임을 늘려도 페이지 부재가 늘어날 가능성 존재)

  • LRU(Least Recently Used) : 최근에 가장 적게 사용된 페이지를 제거한다. (참조시간을 관리하는 데 큰 오버헤드)

  • LFU(Least Frequently Used) : 가장 적게 사용된 페이지를 제거한다.

  • NUR(Not Used Recently) : 최근에 사용하지 않는 페이지를 제거한다.(LRU의 변형. 각 페이지마다 참조 비트와 변형 비트 사용

  • 2차 기회(Second Chance) : 처음 페이지 부재가 발생하면 표시해두고 두번째에 교체한다. (첫 번째는 RR방식, 그 후로는 일반 태그)

  • 국부성(Locality) : 공간적으로 인접하지 않은 곳의 프레임을 교체한다.(시간 국부성-순환, 서브루틴, 스택 등/ 공간 국부성-배열, 순차 실행 등)


[운영체제의 종류]

리눅스

  • 실시간 페이지 적재 기능, cpu 최적화, 가상 콘솔, 강력한 네트워크 기능, 유연한 사용자 환경, POSIX와의 호환, 효율적인 가상메모리,동적 공유 라이브러리 제공, 완벽한 다중 사용자/멀티태스킹 시스템

마이크로소프트 윈도우즈

  • 그래픽 사용자 인터페이스. 개인 컴퓨터에서 많이 사용하는 운영체제. 

iOS 와 OS X

  • iOS는 추상화 계층이 존재한다.(코어 OS 계층, 코어 서비스 계층, 미디어 계층, 코코아 터치 계층)

  • OS X는 애플이 개발하여 판매하는 유닉스 기반의 그래픽 인터페이스 운영체제 시리즈다.

 

유닉스

  • 유닉스는 교육 및 연구 기관에서 즐겨 사용되는 범용 다중 사용자 방식의 시분할 운영 체제이다.

  • 사용자와 운영체제간의 상호작용은 명령어 해석기인 shell을 통해 이루어진다.

  • 멀티태스킹, 멀티유저를 지원한다

  • 하드웨어적인 구조에 독립적으로 응용프로그램을 작성할 수 있는 환경을 제공한다(호환성 및 이식성)

  • TCP/IP에 기반한 통신기능을 운영체제 자체에 내장하고 있으며, 프로세스 간을 연결하는 파이프 기능이 있어서 명령어 간의 데이터 전달이 수월하다.


Reference