반효경 교수님의 운영체제 강의와 Operating System Concepts 를 참고하였습니다.
운영체제의 분류
협의의 운영체제 vs 광의의 운영체제
- 운영체제를 말할 때 좁게는 메모리에 상주하는 커널 부분을 , 넓게는 편의 기능을 제공하기 위한 시스템 유틸리티를 포함한다.
- 복사-붙여넣기 기능을 수행하는 기능은 운영체제에서 제공하는 기능 중 하나이다. 그러나 이런 프로그램은 메모리에 상주하지 않고 필요할 때 운영체제가 메모리에 올려서 사용하는 기능이다.
운영 체제의 분류
- 동시 작업 가능 여부
- 단일 작업 : 한 번에 하나의 작업만 처리한다.
- 프롬프트 상에서 한 명령의 수행을 끝내기 전에 다른 명령을 수행할 수 없다.
- 다중 작업
- 현대 운영체제에서는 한 명령의 수행이 끝나기 전에 다른 명령이나 프로그램을 수행할 수 있음.
- 다중 작업이 되면서 형평성, 효율성 등의 여러 이슈가 등장한다.
- 사용자의 수
- 단일 사용자 : MS-DOS, MS Windows
- 다중 사용자 : UNIX 등 서버용 OS
- 보안 문제나 권한 문제, 동기화 문제 등이 등장한다.
- 처리 방식
- 일괄 처리(batch processing)
- 작업 요청의 일정량을 모아서 한꺼번에 처리한다.
- 초기의 펀치 카드 처리 시스템
- 시분할 (time sharing)
- 다중 작업을 할 때, 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용한다.
- 사용자로 하여금 동시에 작업이 처리되는 듯한 착각을 준다.
- 매우 반응성이 좋다.
- 실시간(Realtime OS)
- 정해진 시간 안에 어떠한 일이 반드시 완료되어야 하는 작업을 위한 OS
- 엄격하게 deadline이 정해진 Hard realtime system
- 어느 정도 타협이 가능한 Soft realtime system
몇 가지 용어
-
Multitasking
: 동시에 여러 작업을 수행하는 형태
-
Multiprogramming
: 메모리를 강조한 표현으로, 메모리 상에 여러 프로그램이 올라가있다.
-
Time Sharing
: CPU의 시간을 분할하여 나누어 쓴다는 의미를 강조
-
Multiprocess
: Multiprogramming과 유사한 의미이다.
-
Multiprocessor
: 한 컴퓨터에 여러 개의 CPU가 들어있는 것을 의미한다.
- 병렬적으로 실행이 가능해지지만 이에 수반되는 여러 문제가 있다.
운영체제의 예
-
UNIX
- 서버용 운영체제
- 코드의 대부분을 C언어로 작성
- 원래는 어셈블리 언어로 하드웨어를 조작했지만 C언어를 만들어 처리하였다.
- 높은 이식성을 가짐
- C언어는 여러 하드웨어 아키텍처에서 호환이 가능하기 때문이다.
- 최소한의 커널 구조
- 소스 코드 공개
- 복잡한 시스템에 맞게 확장이 용이하다.
-
DOS
-
MS Windows
- MS사의 다중 작업용 GUI 기반 운영 체제
- 불안정성
- Plug and Play, 네트워크 환경 강화
- 풍부한 지원 소프트 웨어
컴퓨터 시스템 구조
컴퓨터 내부와 컴퓨터 외부
- 엄밀히 말하면 (CPU, 메모리) 로 구성된 컴퓨터와 외부 장치인 I/O device로 구성된다.
(출처 : https://zangzangs.tistory.com/105)
1) CPU: 주어진 명령어를 수행하는 하드웨어
2) 메모리: CPU가 명령어를 수행하기 위해 필요한 작업공간
3) I/O device Controller, local buffer
3-1) I/O device Controller: CPU가 직접 I/O 장치에서 데이터를 가져올 수 없기 때문에 I/O를 해달라고 부탁하는 장치, 해당 I/O 장치를 관리하는 일종의 CPU
3-2) Local buffer: 요청한 내용을 임시적으로 저장하는 공간, Register와 유사하다고 볼 수 있다.
- device driver: OS 상의 각 I/O 장치 별 처리 루틴(software), CPU가 I/O controller에 부탁하는 명령어
- Firmware : device 내에서 동작하는 코드들
4) Interrupt line: I/O 장치나 시스템 콜에 의해 운영체제에게 요구해야 하는 작업이 있을 때 요청하는 인터럽트 요청을 하는 하드웨어
- Interrupt system : 적절한 신호가 들어오면 CPU 실행을 잠깐 중단시킬 수 있는 핀(칩에 연결된 전기적 접점을 뜻한다) 이나 전기 연결을 포함한다.
5) Mode bit: CPU가 명령어를 수행할 때, 사용자 프로그램을 수행하는지, 운영체제 상의 명령을 수행하는지
를 구분하여 악의적인 명령을 막기 위해 CPU가 어떤 주체가 실행하고 있는지를 알려주는 하드웨어
- 운영체제는 이 작업을 도와줄 수 없다. 어쨌든 운영체제도 메모리 상에서 돌아가고 있는 프로그램이기 때문에 현재 CPU를 가지고 실행중이지 않으면 자신의 명령을 수행할 수 없기 때문이다. 그래서 운영체제는 mode bit이라는 하드웨어의 도움을 받아 이 작업을 수행한다.
- 자신이 제어권을 받을 때에는 mode bit을 0으로 설정하고, CPU 스케줄링을 통해 사용자 프로그램에 제어권을 넘겨줄 때, mode bit을 1로 세팅해서 넘긴다. 그러면 CPU는 이 명령어가 사용자 프로그램의 명령어라는 것을 인식하게 된다.
- 보안을 해칠 수 있는 중요 명령들은 특권 명령으로 분류한다. CPU는 특권 명령이 실행되었는데 mode bit이 1이라면 자동으로 운영체제에게 제어권이 넘어간다. Interrupt나 Exception이 발생하면 mode bit이 0으로 바뀐다.
6) Timer: 프로세스로부터 일정한 시간이 지나면 제어권을 뺏어오는 역할을 해주는 하드웨어 장치
- Mode bit과 마찬가지로 운영체제는 동등한 프로세스이므로 제어권을 뺏어오는 작업은 할 수 없기 때문에 하드웨어의 도움을 받는다.
- 일정 시간 간격으로 timer interrupt를 발생시켜 프로세스가 일정 시간 이상 실행되는 것을 방지한다.
- 클럭과 디지털회로를 사용하므로 정확한 시간을 얻을 수 있다.
- 타이머 내용을 수정하는 명령 또한 특권 명령이며, 운영체제가 프로세스에게 cpu를 넘겨주기 전에 타이머를 설정한다.
7) DMA (Direct Memory Access) Controller: I/O 작업이 완료되었을 때마다 바이트 단위로 인터럽트가 발생하게 되는데, 이 과정에서 CPU의 낭비가 심하게 된다. 그래서 직접 메모리에 접근할 수 있는 DMA Controller를 두어 I/O 장치의 결과를 블록 단위로 메모리에 올리는 작업을 대신하고 완료되면 인터럽트로 CPU에게 알려준다.
8) Register: 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억 장소이다. 일반적으로 현재 계산중인 값을 저장하는 데 사용된다. 대부분의 프로세서에서는 메인 메모리에서 레지스터로 데이터를 옮겨와 데이터를 처리한 후 다시 그 내용을 레지스터에서 메인 메모리로 저장하는 로드-스토어
방식을 따른다.
-
PC(Program counter): CPU가 다음번에 실행할 메모리의 주소를 가지고 있다.
-
IR(Instruction register): 현재 수행중인 명령어를 가지고 있다.
-
MAR(Memory address register): 메모리로부터 읽어오거나 메모리에 쓰기 위한 주소를 가지고 있다.
-
MBR(Memory buffer register): 메모리로부터 읽어온 데이터 또는 메모리에 써야할 데이터를 가지고 있다.
-
I/O AR(Input/Output address register): 입출력 장치에 따른 입출력 모듈의 주소를 가지고 있다.
-
I/O BR(Input/Output buffer register): 입출력 모듈과 프로세서 간의 데이터 교환을 위해 사용된다.
-
레지스터의 종류, 타이머의 동작방식 등등 알아보기
시스템 콜 (System call)
사용자 프로그램이 운영체제의 서비스(I/O 장치 접근 등)를 받기 위해 커널 함수를 호출하는 것
인터럽트 (Interrupt)
인터럽트
- 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다
Interrupt (넓은 의미)
- Interrupt (하드웨어 인터럽트): 하드웨어가 발생시키는 인터럽트
- Trap (소프트웨어 인터럽트)
- Exception: 프로그램이 오류를 범한 경우
- System call: 프로그램이 커널을 호출한 경우
인터럽트 관련 용어
- 인터럽트 벡터
- 특정 인터럽트 발생 시 어떤 명령어를 수행할 지 가리키고 있는 주소
- 인터럽트 처리 루틴
CPU가 운영체제로 다시 넘어오는 경우
- 사용자 프로그램이 필요에 의해 시스템 콜을 한 경우
- 사용자 프로그램이 Exception을 일으키는 경우
- 하드웨어가 자신의 작업의 완료 등의 이유로 인터럽트를 일으키는 경우
- 계속 CPU를 사용하고 싶은데 Timer에 의해 뺏기는 경우
동기식 입출력과 비동기식 입출력
-
동기식과 비동기식이란?
- Synchronous : 여럿이 무엇을 할 때 시간이 잘 맞아떨어지는 형태
- Synchronized swimming : 모두가 시간에 맞춰 동일한 동작을 한다
-
동기식 입출력
- 어떤 프로세스가 진행하다가 I/O 요청이 들어오면 결과가 나올 때까지 기다리는 입출력 방식
- 구현 방법 1
- 단순하게 I/O가 끝날 때까지 기다린다.
- I/O가 완료될 때까지 다른 프로그램이 실행중일 수 없으므로 매 시점 하나의 I/O만 일어난다.
- 매우 비효율적이다.
- 구현 방법 2
- I/O 요청을 하면 완료될 때까지 CPU를 빼앗는다.
- I/O 처리를 기다리는 줄에 해당 프로그램이 줄을 서고, 다른 프로그램이 CPU를 잡아 실행된다.
- 동시에 여러 프로그램이 I/O 처리를 기다릴 수 있고 그 동안 CPU도 낭비되지 않는다.
-
비동기식 입출력
- 어떤 프로세스가 I/O 요청 중에도 일단 제어권이 넘어가고 작업을 수행하는 방식
- 특히 쓰는 작업은 결과를 몰라도 진행할 수 있기 때문에 가능하다.
서로 다른 입출력 명령어
- 일반적으로 I/O 를 수행하는 special instruction에 의한 입출력
- 메모리 접근 명령어를 통해서 접근하는 Memory mapped I/O
OS 공부 꾸준히 하고 계시군요 응원합니다 suntory 💪