[운영체제] 시스템 구조 및 프로그램 실행
💡 tl;dr
- 컴퓨터 시스템 구조
- 입출력(
I/O
)의 수행 - 저장장치 계층 구조
컴퓨터 시스템 구조
[ CPU ]
- [ memory ]
- [ I/O device ]
부트스트랩 (bootstrap)
- 컴퓨터 전원을 켰을때 처음 실행되는 프로그램
- 부트스트랩 실행 후 운영 체제를 로드함
CPU의 역할
- 메모리에서 명령어(
instruction
)를 불러와 실행 - 실행 후
interrupt line
을 체크하여 인터럽트가 발생했는지 확인 OS
에게CPU
권한을 할당timer
에 시간을 정해서 권한을 할당
인터럽트 (Interrupts)
CPU
가 프로그램을 실행 중일 때I/O
등의 예외상황이 발생하여 처리가 필요할 경우CPU
에게 알려 처리할 수 있도록 하는 것CPU
와I/O device
가 서로 통신하는 방법 중 하나- 하드웨어는 언제든지 인터럽트를 트리거 할 수 있음
- 일반적으로 시스템 버스를 통해
CPU
로 신호를 전송
- 일반적으로 시스템 버스를 통해
- 인터럽트 당한 시점의 레지스터와
program counter
를 저장한 후CPU
의 제어를 인터럽트 처리 루틴에 넘김
넓은 의미
- 하드웨어 인터럽트 : 하드웨어가 발생시킨 인터럽트
- Trap (소프트웨어 인터럽트)
Exception
: 프로그램이 오류를 범한 경우System call
: 프로그램이 커널 함수를 호출하는 경우
OS의 역할
- 인터럽트 관리
I/O device
의 인터럽트가 발생하면CPU
로부터 권한을 받아 어떤 프로그램에서 인터럽트가 사용되었는지 확인 후 메모리 할당- 그 후 기존 구동하던 프로그램에
CPU
권한을 할당
- 프로그램 실행을 위한 환경 제공
- 사용자 인터페이스
- 프로그램 실행
- 입출력 동작
- 파일 시스템 조작
- 커뮤니케이션
- 오류 감지
- 자원 할당
- 로깅
- 보호 및 보안
- 프로세스(
thread
)- 다중처리, 동기화, 교착 상태, 메모리, 가상 메모리, CPU 스케줄링 등등
모드 비트 (mode bit)
- 운영체제에는 사용자모드와 커널모드가 있는데, 모드 비트는 운영체제의 현재 모드를 표현하는 값이다.
1 - 사용자 모드
: 사용자 프로그램 수행- 제한된 명령어만
CPU
에서 실행할 수 있음 - 사용자 프로그램의 잘못된 수행으로 피해를 막기 위한 보호 및 보안 장치
- 제한된 명령어만
0 - 모니터 모드
:OS
코드 수행 (커널 모드)- 메모리 뿐만 아니라
I/O device
접근 등 모든 일을 할 수 있음
- 메모리 뿐만 아니라
타이머 (timer)
- 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시키는 장치
- 값이
0
이 되면 타이머 인터럽트 발생 CPU
를 특정 프로그램이 독점하는 것으로부터 보호- 시분할(
time sharing
)을 구현하기 위해 널리 이용됨 - 타이머는 현재 시간을 계산하기 위해서도 사용
장치 제어기 (Device Controller)
bus
를 통해CPU
와 직접적인 통신을 하는 장치- 해당
I/O
장치유형을 관리하는 일종의 작은CPU
- 제어 정보를 위해
control register
,status register
를 가짐 local buffer
를 가짐 (일종의data register
)
- 해당
device driver
(소프트웨어)는 운영체제가 장치들과 호환되게 해주는 하나의 코드- 이를 디바이스 컨트롤러가 인식하는 것
I/O
는 실제device
와local buffer
사이에서 일어남- 디바이스 컨트롤러는
I/O
가 끝났을 경우 인터럽트로CPU
에 그 사실을 전달
DMA controller
- 직접 메모리 접근 (
Direct Memory Access
) CPU
처럼 직접 메모리에 접근할 수 있는 컨트롤러- 메모리 교통정리 역할
I/O
의local buffer
복사작업을 수행하여CPU
의interrupt
작업을 최소화 시킴
SMP (Symmetric multiprocessing)
CPU
를 여러개 다는 구조 (각각의 레지스터와 캐시가 존재)- 가장 일반적인 멀티 프로세서 시스템
- 각 피어
CPU
프로세서가 모든 작업을 수행하는 경우
- 각 피어
- ex) 슈퍼컴퓨터
멀티프로그래밍 (Multiprogramming)
- 여러 프로그램을 메모리에 모두 올리고 동시에 실행 시키는 설계
CPU
사용률을 높이기 위한 목적
멀티 태스킹 (멀티 프로세싱)
CPU
입장에선 각 프로그램의 구동이 찰나의 사용에 불과하므로 여러 프로그램을시간을 쪼개
사용하여 동시에 작동하게 하는 것CPU scheduling
- 여러 프로세스가 동시에 실행될 준비가 된 경우 세스템이 순서를 관리하는 것
CPU
효율을 가장 좋게 만드는 것이 목표
가상화 (Virtualization)
- 단일 컴퓨터의 하드웨어를 여러 다른 실행 환경으로 추상화 하는 기술
VMM
: 가상 머신 매니저 (Virtual Machine Manager)VMware
,XEN
,WSL
등
사용자와 OS의 상호작용
- 인터페이스를 이용한 상호작용
CLI
(Command Line Interface)- 보통 쉘로 알려짐
- sh, bash, csh, tcsh, zsh 등
GUI
(Graphic User Interface)Windows
,MacOS
,Linux
등
- Touch-Screen Interface
- Android, iOS 등
- System calls
API
(Application Programming Interface)- 커널 함수 호출
- 운영체제 프로그램의 함수
- 커널 영역의 code 부분에 속함
- standard C library
입출력(I/O)의 수행
- 모든 입출력 명령은 특권 명령
OS
코드의 상당 부분이I/O
관리 전용
DMA (Direct Memory Access)
- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
CPU
의 중재 없이device controller가 device
의buffer storage
의 내용을 메모리에block
단위로 직접 전송- 바이트 단위가 아닌
block
단위로 인터럽트를 발생시킴 - ex) 유투브 시청
사용자 프로그램이 I/O
를 하는 방법
- 시스템콜 (
system call
)- 사용자 프로그램은 운영체제에게
I/O
요청
- 사용자 프로그램은 운영체제에게
trap
을 사용하여 인터럽트 벡터의 특정 위치로 이동- 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
- 올바른
I/O
요청인지 확인 후I/O
수행 I/O
완료 시 제어권을 시스템콜 다음 명령으로 옮김
I/O
를 하기위해 필요한 인터럽트 종류는? (hard
or soft
)
- 둘 다 필요
- 소프트웨어 인터럽트로 요청
- 끝났을 때는 하드웨어 인터럽트로
controller
가 알려줌
시스템 콜 (System Call)
- 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
- 운영 체제의 커널이 제공하는 서비스에 대해 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스
- 프로그래밍 언어에서 지원하지 않는 기능에 대하여 운영 체제의 루틴을 호출하여 이를 이용하는 것
시스템 콜(system call
or syscall
)의 3가지 기능
- 사용자 모드에 있는 응용 프로그램이 커널의 기능을 사용할 수 있도록 한다.
- 시스템 호출을 하면 사용자 모드에서 커널 모드로 바뀐다.
- 커널에서 시스템 호출을 처리하면 커널 모드에서 사용자 모드로 돌아가 작업을 계속한다.
시스템 콜의 유형
- 프로세스 제어 (
Process Control
) - 파일 조작 (
File Manipulation
) - 장치 관리 (
Device Management
) - 정보 유지 (
Information maintenance
) - 통신 (
Communication
)
CPU
- 프로그램 카운터라는 레지스터가 가르키는 메모리에서 인스트럭션을 하나 읽어와 실행
- 인터럽트가 들어온게 있는지 확인 뒤 있으면 하던 작업을 멈추고
CPU
제어권을 운영체제에게 넘김 OS
는 인터럽트 라인별로 있는 인터럽트 벡터의 주소로 찾아가 인터럽트 처리 루틴을 실행함
인터럽트 벡터
- 해당 인터럽트의 처리 루틴 주소를 가지고 있음
- 인터럽트 번호, 주소 쌍을 포함
인터럽트 처리 루틴
- = Interrupt Service Routine, 인터럽트 핸들러
- 해당 인터럽트를 처리하는 커널 함수
disk controller
가 발생시킨 인터럽트에 대해서CPU
에서 실행시켜야할 커널 함수가 정의되어 있는 것
동기식 입출력 (synchronous I/O)
I/O
요청 후 입출력 작업이 오나료된 후에야 제어가 사용자 프로그램에 넘어감
구현 방법 1
I/O
가 끝날 때까지CPU
를 낭비시킴- 매시점 하나의
I/O
만 일어날 수 있음
구현 방법 2
I/O
가 완료될 때까지 해당 프로그램에서CPU
를 빼앗음I/O
처리를 기다리는 줄에 그 프로그램을 줄 세움- 다른 프로그램에게
CPU
를 줌
비동기식 입출력 (asynchronous I/O)
I/O
가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감- 동기식, 비동기식 입출력 모두
I/O
의 완료는 인터럽트로 알려줌
저장장치 계층 구조 (Memory Hierarchy)
- 서로 다른 특징을 가진 여러 종류의 저장 장치를 함께 사용하여 최적의 효율을 내는 것
- 싸고 성능 좋은 컴퓨터를 구현하는 설계
- 위로 올라갈수록 입출력 속력(대역폭)과 비용 증가
- 아래로 내려갈수록 용량 증가
주 기억장치
- 컴퓨터에서 수치·명령·자료 등을 기억하는 컴퓨터 하드웨어 장치
CPU
에서 직접 접근이 가능- 상수를 쓰는 것 이외의 연산은
CPU
에서 바로 수행할 수 없음- 메모리 값을 레지스터로 로드, 연산, 결과 적용의 단계 필요
- 휘발성 메모리
- 저장된 정보를 관리하기 위해 전력이 요구되는 컴퓨터 메모리
- 전력이 없으면 손실됨
Registers
- 컴퓨터에서 제일 빠른 메모리
CPU
계산 과정에서 작동
Cache Memory
- 레지스터 다음으로 빠른 메모리
- 레지스터와 메인 메모리 간 속도 차이를 완충하기 위해 캐시 메모리 사용
- 메인 메모리보다 용량이 작으므로 당장 사용할 메모리만 올려서 사용
- 캐싱과 재사용 목적
- 투명성 (
Transparent
)- 캐시는 보통 프로그래머가 직접 제어할 수 없으며
CPU
에 의해 자동으로 통제됨 - 캐시가 있든 없든 프로그래머와 외부 사용자에게 보이는 결과는 동일함
- 이러한 특성을 사용자에게 투명(
transparent
)하다고 한다. - 캐시의 특성을 이해하고 프로그래밍하면 훨씬 효율 좋은 코드를 생성할 수 있다.
- 캐시는 보통 프로그래머가 직접 제어할 수 없으며
메인 메모리
RAM
(Random Access Memory)이라 불림.- 어느 위치에든 똑같은 속도로 접근하여 읽고 쓸 수 있다는 의미
CPU
나 메인보드와 분리되어 있는 메모리 중 최상위 메모리- 프로그램을 직접 구동하는 데 사용되는
주 기억 장치
의 최하위 메모리 CPU
와 캐시에 비하면 훨씬 느리지만,HDD
나SSD
보다 차원이 다르게 빠름
보조 기억장치
- 대용량의 자료를 영구적으로 보관하기 위해서 사용하는 저속, 저가, 대용량의 기억장치
- 속도적 측면에서 레지스터가 머릿속에서 떠올리는 정보라면 보조기억장치는 지구를 한 바퀴 돌아 찾아오는 정보로 비유됨
CPU
에서 직접 접근이 불가능한 메모리- 접근하려면 디바이스 드라이버와 시스템 콜을 통해 주기억장치로 로드(
Load
) 필요 - 비휘발성 메모리
- 전원이 공급되지 않아도 저장된 정보를 계속 유지하는 메모리
스토리지 (SSD, HDD)
- 보조 기억장치 중에서 성능적으로 최상위에 위치 (
SSD
>HDD
) - 보통
SSD
는 100GB ~ 1TB 정도,HDD
는 1TB ~ 6TB 정도의 용량으로 구성 - 일반적으로
ATA
라는 중간 계층을 따로 두어 통신 NVMe SSD
는CPU
와 직접 통신
이동식 저장장치
USB
메모리,ODD
등- 기업에선
backup
용으로 자기테이프도 사용 - 때로는 키보드, 마우스 등의 입력장치나 클라우드 스토리지 등을 포함하기도 함
참고
[운영체제] 시스템 구조 및 프로그램 실행