학교/운영체제

[운영체제] 1. 서론

daykim 2023. 1. 7. 16:25
아래 도서 기반 내용 정리
 

운영체제 | Abraham Silberschatz - 교보문고

운영체제 | ▶ 이 책은 운영체제론을 다룬 이론서입니다. 운영체제론의 기초적이고 전반적인 내용을 학습할 수 있습니다.

product.kyobobook.co.kr

 

목차

  • 운영체제가 할 일
  • 컴퓨터 시스템의 구성
  • 컴퓨터 시스템의 구조
  • 운영체제의 작동
  • 자원 관리

 

운영체제가 할 일


운영체제

컴퓨터 하드웨어를 관리하고, 응용 프로그램 실행 환경을 제공하는 소프트웨어

 

컴퓨터 시스템의 4가지 구성요소

  1. 하드웨어 : CPU(중앙처리장치), 메모리 및 입출력(I/O) 장치로 구성되며 기본 계산용 자원을 제공
  2. 운영체제 : 다양한 사용자를 위해 응용 프로그램 간의 하드웨어 사용을 제어하고 조정
  3. 응용 프로그램 : 워드 프로세서, 컴파일러, 웹 브라우저 등으로 사용자의 계산 문제를 해결하기 위해 이들 자원이 어떻게 사용될지 정의
  4. 사용자

사용자 관점

사용자는 컴퓨터 앞에 앉아 키보드와 마우스를 조작
운영체제는 사용자가 컴퓨터 자원 사용을 신경쓰지 않게 도우며, 쉽게 이용할 수 있도록 만든다.

또 다른 경우, 사용자는 메인 프레임에 연결된 터미널을 사용하거나, 미니 컴퓨터를 사용한다.
이 상황에서 컴퓨터의 자원을 여러 사용자가 나눠쓰게 되는데, 운영체제는 사용자들이 자원을 공평히 사용할 수 있도록 돕는다.

시스템 관점

시스템에게 운영체제는 자원할당자(Resource allocator)
컴퓨터 시스템은 CPU 시간, 메모리 공간, 저장장치 공간, 입출력 장치 등을 가진다.
운영체제는 이러한 컴퓨터 자원을 관리하는 제어 프로그램으로서 동작한다.

운영체제 역할
1. 여러 응용프로그램 간의 하드웨어 사용을 제어 및 조정
2. 자원 할당자 : 컴퓨터 시스템 동작 시 자원을 적절하게 사용할 방법 제공

 

  • 커널 : 컴퓨터에서 계속해서 실행되고 있는 프로그램
  • 시스템 프로그램 : 운영체제와 연관 있지만, 커널의 필수적인 부분은 아닌 프로그램
  • 응용 프로그램 : 시스템의 운영과 관계가 없는 모든 프로그램
  • 미들웨어 : 개발자들에게 추가적 서비스를 제공하는 소프트웨어 프레임워크들의 한 세트

 

컴퓨터 시스템의 구성


현대의 컴퓨터 시스템은 하나 이상의 CPU와 장치 컨트롤러로 구성되어 있다.
이들은 공통 버스(Common bus)로 이어져  있다.

  • 장치 컨트롤러 : 특정 유형의 장치를 맡는다. (ex. 디스크, 오디오, 그래픽 디스플레이 등)
  • 버스 : 공유하는 메모리와 컴포넌트들 사이의 접근을 제공한다.

각 장치 컨트롤러는 장치 드라이버가 있다.
장치 컨트롤러의 작동을 잘 알고 있고, 나머지 운영체제 장치에 대한 일관된 인터페이스를 제공한다.

인터럽트 (Interrupts)

장치 컨트롤러가 CPU에게 신호를 보내 이벤트 발생을 알리는 것이다.

CPU가 어떤 작업을 하는 중 우선 처리가 필요한 경우 발생시 인터럽트 신호를 보낸다.
그러면 커널은 작업을 멈추고 인터럽트를 처리한 뒤 다시 기존 작업으로 돌아온다.

인터럽트 벡터 (Interrupt vector)

  • 인터럽트를 처리할 수 있는 서비스 루틴들의 주소를 가진 공간
  • 파일 읽기 / 쓰기와 같은 중요한 동작들이 하드코딩 되어있다고 한다.

인터럽트 서비스 루틴 (Interrupt Service Routine, ISR)

  • 인터럽트 발생 시 실행할 일

인터럽트 처리 과정

  1. 하나의 명령어 실행을 완료할 때마다 CPU가 인터럽트 요청 라인(interrupt request line) 감지
  2. CPU가 컨트롤러가 인터럽트 요청 라인에 신호를 보낸 것을 감지하면, 인터럽트 번호를 읽고 이 번호를 인터럽트 벡터의 인덱스로 사용해 인터럽트 핸들러 루틴(interrupt-handler routine)으로 점프한다.
  3. 해당 인덱스와 관련된 주소에서 실행을 시작한다.
  4. 인터럽트 처리기는 작업 중 변경될 상태를 저장하고, 인터럽트 원인 확인 후 필요한 처리 수행한다.
  5. 상태 복원을 수행하고, CPU는 인터럽트 전 상태로 되돌린다.

인터럽트는 빈번히 발생하기 때문에 빠르게 처리되어야 한다.

 

저장장치 구조 (Storage Structure)

CPU는 명령을 실행하기 위해선 프로그램을 먼저 메모리에 적재해야 한다.
메인 메모리는 보통 RAM(Random-Access Memory)으로 부른다.
주로 DRAM

  • 적재 (load) : 메인 메모리로부터 CPU 내부의 레지스터로 한 바이트 또는 한 워드 옮기는 것
  • 저장 (store) : 레지스터의 내용을 메인 메모리로 옮기는 것
  • 워드 (word) : 그 컴퓨터 구조의 본연의 데이터 단위, 하나 이상의 바이트로 구성된다.

RAM은 휘발성으로 전원이 꺼지거나 손실될 때 내용이 손실된다.
또 대용량 데이터를 영구히 저장하기에는 너무 작다.

따라서 보조저장장치(Secondary storage)가 필요하다.
대부분의 프로그램은 메모리에 적재될 때까지 보조저장장치에 저장된다.
보조저장장치는 메인 메모리보다 훨씬 느리다.

  • 비휘발성(Non-volatile, NVM) : 하드 디스크 드라이브(HDD), SSD(Soli-State Disk) 
  • 휘발성 : 캐시, 레지스터 등

다양한 저장장치 시스템 간의 주요 차이점은 속도, 크기 및 휘발성에 있다.
메모리가 작고 빠를수록 CPU에 가깝다.

하버네이트(Hibernate) : 컴퓨터가 절전모드에 들어가면, 메모리의 모든 데이터를 덤프해 보조 기억장치에 담아두고, 다시 절전모드를 빠져나오면 덤프해둔 데이터를 불러와 그대로 작업을 수행하는 것.

  • 속도가 빠르면 가격대비 저장용량이 적다.
  • 가격대비 저장용량이 크면 속도가 느리다.

 

입출력구조 (I/O Structure)

기억 장치는 여러 입출력 장치 중 하나다.

NVS I/O와 같은 대량 데이터 이동에 범용 버스를 사용하면, 높은 오버헤드를 유발할 수 있다.

이를 해결하기 위해 DMA (Direct memory Access)가 사용된다.

 

DMA (Direct memory Access)

  • CPU 개입 없이 I/O 장치와 기억장치 사이의 데이터를 전송하는 접근 방식
    + CPU를 거치는 방식은 PIO(Programmed I/O)라고 한다.
  • 메모리로부터 버퍼로 또는 버퍼로부터 메모리로 데이터 블록 전체를 전송한다.
    속도가 느린 장치처럼 한 바이트마다 인터럽트가 발생하는 것이 아닌, 블록이 전송될 때마다 인터럽트 발생
  • 장치 컨트롤러가 전송작업을 수행하는 동안 CPU는 다른 작업을 수행할 수 있다.

 

컴퓨터 시스템 구조 (Computer-System Architecture)


컴퓨터 시스템 구성요소 정의

  • CPU : 명령을 실행하는 하드웨어
  • Processor : 하나 이상의 CPU를 포함하는 물리적 칩
  • Core : CPU의 기본 계산 단위
  • multicore : 동일한 CPU에 여러 컴퓨팅 코어를 포함함
  • multiprocessor : 여러 프로세서 포함

 

단일 처리기 시스템 (Single-Processor System)

과거 대부분 컴퓨터 시스템은 싱글프로세서 코어를 가진 하나의 CPU를 포함하는 싱글 프로세서를 사용했다.

디스크, 키보드 및 그래픽 컨트롤러 같은 장치별 프로세서 형태로 제공하는 특수 목적 프로세서도 있다.

 

다중 처리기 시스템 (Multiprocessor System)

최신 컴퓨터에는 멀티 프로세서 시스템이 일반적이다.
일반적으로 단일 코어 CPU가 있는 두 개 이상의 프로세서가 있다.

장점

  • 처리량 증가 : 프로세서가 늘어나 더 빠른 시간 안에 연산을 수행할 수 있다.
    하지만, 프로세서를 계속 늘린다고 한없이 성량이 좋아지는 것은 아니다.
    N개의 프로세서 속도 향상 비율은 N이 아니다.

 

SMP (대칭 멀티 프로세싱, Symmetric Multiprocessing)

가장 일반적인 멀티 프로세서 시스템이다.

  • 위의 사진은 각각 자체 CPU를 가지는 두 개의 프로세서가 있는 일반적인 SMP 구조
  • 개별 또는 로컬 캐시와 자체 레지스터가 있다.
  • 이 모델의 장점은 많은 프로세스를 동시에 실행할 수 있는 것
  • 단점은 CPU가 독립적이기 때문에 하나는 유휴 상태이고, 다른 하나는 과부하에 걸려 비효율적일 수 있다.

 

멀티 코어 시스템 (Multicore System)

하나의 칩에 여러개의 컴퓨팅 코어가 상주하는 시스템

  • 칩 내 통신이 칩 간 통신보다 빠르므로 다중코어 시스템은 싱글 코어를 가지는 여러 칩보다 효율적일 수 있다.
  • 하나의 칩은 여러 개의 싱글코어 칩보다 훨씬 적은 전력을 사용한다.
  • 각 코어는 자신만의 레지스터와 로컬 캐시를 갖는다.
    하나의 캐시를 공유하기도 한다.

+++

클러스터형 시스템 (Clustered Systems)

클러스터 시스템은 둘 이상의 독자적 시스템 또는 노드들을 연결하여 구성한다.

클러스터링은 높은 가용성(availability)를 제공하기 위해 사용한다.
클러스터 내 하나 이상의 컴퓨터가 고장나더라도 서비스는 계속 제공된다.
각 노드는 하나 이상의 다른 노드를 감시하고, 감시받던 노드가 고장나면 감시하던 노드가 고장난 노드의 저장장치에 대한 소유권을 넘겨받고, 그 노드에서 실행 중이던 응용 프로그램을 다시 시작하기 때문이다.

비대칭형 클러스터링

하나의 호스트 서버가 활성 서버들을 감시하는 작업을 수행합니다.
활성 서버가 고장나면 호스트 서버가 활성 서버가 되어 고장난 서버의 작업을 수행합니다.

대칭형 클러스터링

여러 서버가 응용 프로그램을 실행하고 서로 감시합니다.
사용 가능한 모든 하드웨어를 사용하기 때문에 비대칭형 클러스터링보다 효율적입니다.

 

운영체제 작동 (Operating-System Operations)


운영체제는 프로그램이 실행되는 환경을 제공한다.

부트 스트랩 (Bootstrap program)

컴퓨터 전원을 켜거나 재부팅 시, 컴퓨터를 실행하기 위한 초기 프로그램

  • 일반적으로 컴퓨터 하드웨어 내의 펌웨어에 저장
  • CPU 레지스터에서 장치 컨트롤러, 메모리 내용 등 시스템의 모든 측면 초기화
  • 운영체제를 적재하는 방법과 해당 시스템 실행을 시작하는 방법을 알아야 한다.
    이를 위해 부트스트랩은 운영체제 커널을 찾아 메모리에 적재해야 한다.

시스템이 완전히 부팅되면, 시스템은 어떤 이벤트가 발생할 때까지 기다린다.
이벤트는 거의 항상 인터럽트를 발생시킨다.

  • 프로세스  : 실행중인 프로그램

 

멀티 프로그래밍 (Multiprogramming)

여러 프로그램을 메모리에 적재해두고, 하나의 프로세스가 대기 상태일 때 다른 프로세스의 작업을 수행하는 시스템

하나의 프로그램은 항상 CPU나 I/O 장치를 바쁘게 유지할 수 없다.
만약 하나의 프로세스만 CPU를 점유한다면, I/O를 처리할 때 CPU가 대기해야 한다. -> 자원낭비

 멀티 프로그래밍은 이를 방지하기 위해 다른 대기중인 프로세스에게 임시적으로 CPU 자원을 넘겨주는 것이다.

CPU의 사용 효율을 최대화 하는 것이다.
하지만, 100% 이용률은 overhead를 발생시킨다.

 

멀티 태스킹 (Multitasking)

CPU 스케줄링 알고리즘이 프로세스 간에 빠르게 전환해 작업하는 방식

시분할(Time Sharing) 시스템으로, 프로세스들이 번갈아가며 메모리를 사용하면,
사용자 입장에선 마치 동식에 작동하는 것 처럼 보인다.
이 때 빠른 응답 시간(Response time)을 제공한다.

 

멀티프로그래밍과 멀티태스킹은 여러 작업을 동시에 메모리에 올리는 방식이다.
때문에 운영체제는 실행할 프로세스를 선택해야하는데 이를 CPU 스케줄링이라고 한다.

메모리를 너무 많이 사용하는 경우, 응답 시간을 줄이기 위해 가상 메모리를 사용한다.
가상 메모리는 보조기억 장치 일부를 메인 메모리처럼 사용하는 기술로 실제 물리 메모리보다 더 큰 프로그램을 구동할 수 있게 해준다.

 

운영체제는 악의적인, 잘못된 프로그램으로 인해 다른 프로그램 또는 운영체제가 잘못 실행되지 않도록 보장해야 한다.

Dual-mode and Multimode Operation (이중, 다중 모드 운용)

사용자 프로그램이 함부로 시스템에 접근하지 못하도록  사용자 모드(User Mode)와 커널 모드(Kernel Mode)를 사용한다.
모드 비트로 운영체제를 위해 실행되는 작업과 사용자를 위해 실행되는 작업을 구분할 수 있다.

모드 비트(Mode bit)

  • 0 : 커널 모드
  • 1 : 유저 모드

사용자 응용이 운영체제로부터 서비스를 요청하면, 요청 수행을 위해 사용자 모드에서 커널 모드로 전환

이중 모드는 잘못된 사용자로부터 운영체제를, 잘못된 사용자 서로를 보호한다.

악영향을 끼칠 수 있는 일부 명령을 특권 명령(Privileged instruction)으로 지정한다.
이 특권명령은 커널 모드에서만 수행되도록 허용한다.

사용자 모드에서 특권명령을 수행하려 시도하면, 하드웨어는 불법적 명령으로 간주해 운영체제로 트랩을 건다.

 

트랩(Trap)

  • 오류 또는 사용자 프로그램의 특정 요청으로 발생하는 소프트웨어 생성 인터럽트
  • 이 경우 오류 메세지 출력 후 프로그램 강제종료

 

시스템 콜 (System Call)

사용자 프로그램이 운영체제가 수행하도록 지정된 작업을 운영체제에 요청하는 것
  • 수행 과정
    1. 제어가 인터럽트 벡터를 통해 운영체제 내의 서비스 루틴으로 전달된다.
    2. 모드 비트가 커널 모드로 설정된다.
    3. 요청을 수행한다.
    4. 제어를 시스템 콜 다음의 명령으로 복귀한다.

 

타이머 (Timer)

지정된 시간 후 인터럽트를 발생시킨다.

사용자 프로그램이 무한 루프에 바지거나 시스템 서비스 호출에 실패해 제어가 운영체제로 복귀하지 않는 경우가 없도록 방지하기 위한 방법이다.
운영체제는 카운터를 설정하고, 매 틱(Ticks)마다 감소시켜 0에 도달하면 인터럽트 발생

타이머가 인터럽트 발생시

  • 제어는 운영체제에게 넘어간다.
  • 운영체제는 인터럽트를 치명적 오류로 취급하거나 프로그램에게 더 많은 시간을 준다.

타이머 값을 변경하는 명령은 특권 명령이다.

 

자원 관리 (Resource management)


운영체제는 자원관리자이다.
시스템의 CPU, 메모리 공간, 파일 - 저장 공간, I/O 장치는 운영체제가 관리해야 하는 자원에 속한다.

프로세스 관리 (Process Management)

운영체제가 프로세스 관리를 위해 하는 활동

  • 프로세스 생성과 제거
  • CPU에 프로세스와 스레드 스케줄
  • 프로세스의 일시 중지와 재수행
  • 프로세스 동기화를 위한 기법 제공
  • 프로세스 통신을 위한 기법 제공

프로세스는 자기 일을 수행하기 위해 앞서 말한 자원들 필요로 하고, 보통 실행되는 동안 할당된다.
프로세스가 생성될 때 물리, 논리적 자원 외에 초기와 데이터(입력)도 전달될 수 있다.
프로세스가 종료되면 운영체제는 재사용 가능한 자원을 회수한다.

디스크에 저장된 프로그램은 수동적(passive) 개체
프로세스는 다음 수행할 명령을 지정하는 프로그램 카운터를 가진 능동적(active) 개체

한 시스템은 프로세스의 집합으로 구성된다.
프로세스는 시스템 내의 작업 단위다.

프로세스 구성

  • 운영체제 프로세스 : 시스템 코드를 수행하는 프로세스
  • 사용자 프로세스 : 사용자 코드를 수행하는 프로세스

 

메모리 관리 (Memory Management)

메인 메모리는 CPU와 입출력 장치에 의해 공유되는, 빠른 접근이 가능한 데이터 저장소

프로그램 실행을 위해 프로그램은 반드시 절대 주소로 매핑(mapping) 되고, 메모리에 적재되어야 한다.

  • 메모리의 어느 부분이 현재 사용되는지, 어느 프로세스에 의해 사용되는지 추적해야 한다.
  • 필요에 따라 메모리 공간을 할당하고 회수해야 한다.
  • 어떤 프로세스들을 메모리에 적재하고 제거할 것인지 결정해야 한다.

 

캐시 관리 (Cache Management)

캐싱(Caching)은 굉장히 빠르고 작은 저장장치인 캐시 메모리를 사용해 컴퓨터의 속도를 높이는 기술 

  • 특정 정보가 필요할 경우, 먼저 캐시에 그 정보가 있는지 조사
  • 정보가 있다면 그 정보를 캐시로부터 직접 사용
  • 없다면 메인 메모리 시스템으로부터 그 정보를 가져와 사용
  • 이 정보가 곧 다시 사용될 확률이 높다면, 캐시에 넣는다.

CPU는 연산 작업 위해 메인메모리에 올라온 명령어를 가져와 레지스터에 적재 후 계산한다.
레지스터는 비싸고 용량 작다.
또 연산에 필요한 데이터를 매번 메인메모리에서 읽고 쓰면 비효율 발생 가능
연산 위해 자주 쓰는 데이터를 넣어두고 쓴다.

캐시 일관성 문제

동일한 데이터가 서로 다른 저장장치에 저장될 수 있다.
이 때 한 저장장치에서 변경된 데이터의 값이 다른 저장장치에도 변경된 내용이 갱신 되어야 한다.

하나의 프로세스만 실행하는 환경에서는 최상위 계층 값을 참조하기 때문에 문제가 없다.
하지만, 멀티 태스킹 환경에서는 각 프로세스가 가장 최근에 갱신된 값을 얻는 것을 보장하기 위해 주의해야 한다.

 

 

 

 

'학교 > 운영체제' 카테고리의 다른 글

[운영체제] 3. 프로세스 관리  (0) 2023.01.16
[운영체제] 2. 운영체제 구조  (0) 2023.01.09
[OS] 3. Operating System Structures  (0) 2022.05.24
[OS] 2-2. Computer Structures  (0) 2022.05.24
[OS] 2-1. 운영체제의 종류  (0) 2022.05.24