운영체제란 무엇인가?
이미지 출처
- 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층
- 협의의 운영체제(커널)
운영체제의 핵심 부분으로 메모리에 상주하는 부분
- 광의의 운영체제
커널 뿐만 아니라 각종 주변 시스템 유틸리티를 포함한 개념
운영체제의 목적
- 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공
- 자원을 효율적으로 관리
운영 체제의 분류
동시 작업 가능 여부
단일 작업
다중 작업
- 동시에 두 개 이상의 작업 처리(현대의 운영체제는 대부분 다중 작업)
- ex) UNIX, MS Windows...
사용자의 수
단일 사용자
ex) MS Windows
다중 사용자
ex) Unix, NT server ...
처리 방식
일괄 처리 | batch processing
- 작업 요청의 일정량 모아서 한꺼번에 처리
- 작업이 완전 종료될 때까지 기다려야 함
시분할 | time sharing
- 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
- 일괄 처리 시스템에 비해 짧은 응답 시간을 가집
- interactive한 방식
실시간 | Realtime OS
- 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간 시스템을 위한 OS
- 즉, 데드라인이 있고 꼭 지켜야하는 시스템
용어정리
- Multitasking: 다중 작업
- Multiprogramming: 메모리에 여러 프로그램이 올라가있는 상태
- Time Sharing: CPU의 시간을 분할하여 나누어 씀
- Multiprocess: 다중 처리
- Multiprocessor: 하나의 컴퓨터에 CPU(processor)가 여러 개 붙어 있음을 의미.
운영 체제의 예
- 유닉스, 리눅스, MS Windows, ...
운영체제의 구조
- CPU 스케줄링
누구에게 CPU를 줄까?
- 메모리 관리
한정된 메모리를 어떻게 쪼개어 쓸까?
- 파일 관리
디스크에 파일을 어떻게 보관할까
- 입출력 관리
각기 다른 입출력장치와 컴퓨터 간에 어떻게 정보를 주고 받게 할까
- 프로세스 관리
프로세스의 생성과 삭제
자원 할당 및 반환
프로세스 간 협력
컴퓨터 시스템 구조
Registers
- Registers: 명령어를 실행하기 위해 필요한 데이터와 상태, 명령어를 저장하는 기억 소자. CPU 내부에 존재하며, 기억 장치 중 가장 빠르며 용량이 작음
- Program Counter: 다음번에 실행할 기계어의 메모리 주소를 가지고 있는 레지스터. 즉, Program Counter가 가리키고 있는 메모리 위치에서 매번 기계어를 하나씩 가져와서 실행함
Device Controller, Local Buffer
- 컴퓨터를 부팅하면 OS가 먼저 실행되어 상주하고 있고,
프로그램을 실행하면 메모리에 올라가면서 프로세스가 됨
- Device controller: I/O 장치들을 전담하는 작은 CPU들이 붙어있음
- local buffer: Device controller의 작업 공간(작은 메모리라고 보면 됨)
- device driver(소프트웨어): I/O에 요청을 하는 방법이 들어있는 곳 => CPU가 실행하는 코드
- Firmware: device driverd를 통해 실행되는 코드가 바로 펌웨어. 즉, device controller에 들어있는 코드
Interrupt | 하드웨어 인터럽트
- 일반적인 인터럽트는 하드웨어 인터럽트를 이야기함 (소프트웨어 인터럽트는 아래
system call
과 mode bit
에서 설명)
- CPU에는 Interrupt line이 달려있음
- 프로그램 A를 실행했을 때 Disk에 뭔가 필요하다고 하면 CPU가 직접 가져오는 것이 아니라, OS가 디스크 컨트롤러에게 어떤 파일을 읽어달라는 요청을 함.
- 컨트롤러에게 일을 던져놓고 메모리에서는 CPU를 다른 프로그램에 넘김
- 디스크 컨트롤러가 일을 다 했다면 CPU에 알려주는 방법이 바로 Interrupt를 거는 것
- CPU는 Interrupt line을 확인하고 처리해야할 일이 있다면 자동적으로 OS에 CPU를 넘김
- OS는 다시 필요한 프로그램에 CPU를 넘김
Timer
- CPU 독점을 막기 위한 하드웨어
- 일정 시간마다 Interrupt를 발생시킴
- 일정 시간 후 자동적으로 OS에 CPU 제어권이 넘어옴
Mode Bit | Trap | 소프트웨어 인터럽트
- mode bit: CPU에서 기계어를 실행할 때, OS가 실행하는 것인지, 사용자 프로그램이 실행하는 것인지 구분하는 역할
(사용자 모드_사용자 프로그램 1 / 모니터 모드_OS 코드 0)
- CPU가 사용자 프로그램에 넘어가면 OS는 CPU를 제어할 방법이 없음(제어하는 기계어도 CPU에서 실행될 때 의미가 있는데, CPU가 넘어가 있기 때문)
- 사용자 프로그램에 CPU를 넘길 때, mode bit을 1로 변경 후 넘김 => 사용자 모드에서 권한이 없는 기계어를 실행하고자 할 때(Exception) CPU는 자동으로 OS에게 넘어감
System Call | Trap | 소프트웨어 인터럽트
- 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
- 모든 I/O는 특권 명령이기 때문에 사용자 프로그램은 권한이 없음. 따라서, OS에 요청을 해야함. 그것이 바로 시스템콜
- OS로 CPU를 넘기기 위해서 사용자 프로그램이 스스로 메모리에 인터럽트를 거는 것이 바로 시스템콜(사용자 프로그램이 직접 Program Counter를 넘길 수 없기 때문에 interrupt를 발생시켜 주도권을 넘김)
Interrupt에 대한 정리
1. 협의의 Interrupt
인터럽트 당한 시점의 레지스터와 program counter
를 save
한 후 CPU
의 제어를 인터럽트 처리 루틴에 넘김
2. 광의의 Interrupt
2-1. Interrupt(하드웨어 인터럽트)
2-2. Trap(소프트웨어 인터럽트)
- Exeption: 프로그램이 오류를 범한 경우
- System Call: 프로그램이 커널 함수를 호출하는 경우
=> hardward interrupt
, software interrupt(expeption, system call)
의 모든 경우에 interrupt line
을 통해 동작함
=> 현대의 운영체제는 인터럽트에 의해 구동됨
동기식 입출력과 비동기식 입출력
동기식 입출력(synchronous I/O)
- I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
비동기식 입출력(asynchronous I/O)
- I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘거암
DMA | Direct Memory Access
기존 : CPU 입장에서 interrupt가 너무 빈번하게 들어오면 하던 일을 멈추고 interrupt에 해당하는 local buffer에 점근해서 카피, memory에 올리고 일을 처리함. 아주 작은 단위까지 계속해서 이런 방식으로 반복하는 것은 비효율적이라는 거지.
- CPU를 제외하면 Memory에 직접 접근할 수 있는 장치가 딱 하나 있는데, 그것이 바로 DMA.
- 일정 수준까지는 interrupt가 발생해도 DMA가 local buffer에서 카피를 해와서 메모리에 올려줌
- 일정 수준이 넘어가면 interrupt를 발생시킴.
- 따라서 interrupt 발생 빈도가 낮아지고, CPU를 더욱 효율적으로 사용할 수 있게 됨.
- 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴
서로 다른 입출력 기계어
- 메모리 접근하는 기계어, I/O 접근하는 기계어가 따로 있는 방식
- 메모리 접근하는 기계어로 I/O까지 접근하는 방식
다만 메모리 주소가 I/O 장치까지 연장해서 메겨지도록 해둠
저장장치 계층 구조
- Primary
CPU에서 직접 접근 가능 / 빠름 / 높은 비용 / 휘발성
- Secondary
I/O를 통해서 접근 가능 / 느림 / 낮은 비용 / 비휘발성
- Caching: 더 빠른 스토리지 시스템에 정보 복사해두고 씀(재사용성)
프로그램의 실행(메모리 load)
- 실행파일의 가상 메모리 중에서 즉시 필요한 것들을 실제 메모리에 올림
- 실제 메모리가 꽉찬 상태라면 스왑 메모리에 배분
- 가상 메모리는
stack
, data
, code
로 구성됨
code
는 address translation
을 통해 주소값이 번역되어 전달됨
커널(OS) 주소 공간의 내용
사용자 프로그램이 사용하는 함수
함수
- 사용자 정의 함수
: 자신의 프로그램에서 정의한 함수
- 라이브러리 함수
: 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수, 자신의 프로그램의 실행 파일에 포함되어 있음
- 커널 함수
: 운영체제 프로그램의 함수
: 커널 함수의 호출 = 시스템 콜
프로그램의 실행
user mode
, kernel mode
를 돌면서 실행됨
📚 참고
KOCW | 운영체제 | 이화여자대학교 | 2017-1 | 반효경
Photo by Tianyi Ma on Unsplash