🧭 CS Study - 운영체제
🚩 주제 : 운영체제 개요 시스템 구조와 프로그램 실행
🎥 강의 : KOCW 운영체제 강의 - 이화여자대학교 반효경 교수님
컴퓨터 하드웨어 위에 설치되어 소프트웨어와 하드웨어를 연결하는 소프트웨어이다. 좁은 의미의 운영체제를 커널(메모리에 상주하는 부분)이라고 한다. 넓은 의미의 운영체제는 커널과 주변 시스템 유틸리티(메모리에 상주하지 않는 별도의 프로그램)을 말한다. 보통의 경우 커널을 운영체제라고 한다.
컴퓨터 시스템을 편리하게 사용하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 것이 OS의 목적이다. 프로세서, 기억장치, I/O장치 등의 자원이 최대한의 성능을 내도록 형평성 있는 자원 분배를 주된 역할로 한다. 사용자 및 운영체제를 보호하고 프로세스, 파일, 메모리를 관리하는 것도 OS의 역할이다.
작업 개수 기준
단일 작업(Single Tasking) : 한번에 하나의 작업만 처리 가능(MS-DOS)
다중 작업(Multi Tasking) : 동시에 두 개 이상의 작업 처리 가능(UNIX, MS Windows)
사용자 인원 기준
단일 사용자 : MS-DOS, MS Windows
다중 사용자 : UNIX, NT Server
처리 방식 기준
일괄 처리(batch processing)
시분할 처리(time sharing)
실시간 처리(Realtime OS)
Multitasking
: 하나의 프로그램이 끝나기 전에 다른 프로그램이 실행 가능한 것
Multiprogramming
: 메모리에 여러 프로그램이 동시에 올라가는 것
Time sharing
: CPU에게 시간을 분할해서 할당하는 것
Multiprocess
: 프로그램을 여러개 동시에 실행하는 것
=> 위 4가지 용어는 비슷한 의미를 갖는다.
** Multiprocessor : 하나의 컴퓨터에 CPU(processor)가 여러개 붙어 있는 것
CPU : 어떤 프로그램에게 CPU를 할당할까?
-> CPU 스케줄링
Memory : 한정된 메모리를 얼마나, 어떤 프로그램에게 할당할까?
-> 메모리 관리
Disk : 한정된 디스크에 파일을 어떻게 보관할까?
-> 파일 관리
I/O device : CPU와 I/O장치 간에 발생하는 속도 차이를 어떻게 관리할까?
-> 입출력 관리
프로세스 관리: 프로세스의 생성과 삭제, 자원 할당 및 반환, 프로세스간의 협력
그 외에도 운영체제는 네트워킹, 보호시스템, command line interpreter 등도 관리한다.
컴퓨터 시스템은 CPU, Memory 등으로 이루어진 컴퓨터와 Disk, 키보드, 프린터, 모니터 등으로 이루어진 I/O장치로 구성된다.
Memory : CPU의 작업 공간
CPU : 매 clock Cycle 마다 Memory에서 instruction을 하나씩 읽어서 실행한다.
Hard Disk : 데이터를 읽어서 Memory로 가져오거나 연산 결과를 저장하기도 한다. 입출력 역할을 동시에 수행한다.
Timer : 특정 프로그램이 CPU를 독점하는 것을 막는다.
Device controller : I/O장치를 관리한다. local buffer로 작업을 저장한다.
Mode bit
Mode bit을 통해 하드웨어적으로 두 가지 모드의 연산을 지원한다.
Mode bit이 0일때는 메모리, I/O device에 접근하는 것이 가능하다.
Mode bit이 1일때는 제한된 instruction만 실행 가능하다. CPU를 사용자 프로그램에게 넘겨줄 때 Mode bit은 1로 설정하여 제한된 접근을 수행한다. I/O 장치에서 interrupt가 들어오면 CPU 제어권이 OS로 넘어가서 mode bit이 0이 된다.
1: 사용자 모드 : 사용자 프로그램 수행
0: 모니터 모드 : OS 코드 수행(kernel 모드, 시스템 모드)
Timer
특정 프로그램이 CPU를 독점하는 것을 막기 위해서 운영체제가 프로그램에게 CPU를 넘겨 줄때는 Timer에 정해진 시간을 할당한 뒤에 넘겨준다. Timer가 끝나면 CPU에 인터럽트를 걸어서 CPU를 넘길수 있게한다.
Device Controller
각각의 I/O 장치를 관리하는 일종의 작은 CPU이다. control register, status register를 갖는다. 로컬 버퍼에 할일을 쌓아 둔다.
** device driver : 각 device를 접근하기 위해서 사용하는 software
DMA Controller
입출력 장치에 의해 CPU에 너무 많은 interrupt가 걸리기 때문에 그러한 장애를 방지하기 위하여 DMA를 사용한다. (DMA Controller는 하드웨어 장치이다.) DMA 컨트롤러는 memory에 CPU와 DMA가 접근할 수 있게 한다. Memory Controller는 DMA Controller와 CPU가 Memory의 같은 부분을 점유하지 못하도록 관리한다. DMA controller는 CPU와 상관없이 device controller의 local buffer에 저장된 데이터를 memory로 복사해 주는 일을 한다. 이때 buffer 저장소 내용을 메모리에 블럭단위로 전송한다. 그래서 byte단위가 아니라 block 단위로 CPU에 인터럽트를 발생시킨다.
입출력의 수행 과정
넓은 의미의 인터럽트
인터럽트 수행 과정의 예시
** 인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음
** 인터럽트 처리 루틴(Interrupt Service Routine, 인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수
동기식 입출력(synchronous I/O)
I/O 요청이 있을 때, 해당 요청에 대한 입출력 작업이 완료된 후에야 사용자 프로그램에게 CPU를 넘기는 것이다.
사용자 프로그램이 Kernel에 I/O작업 요청을 하면 Kernel이 I/O 작업이 끝나기 전까지 CPU를 점유하다가 I/O interrupt가 들어오면 데이터와 CPU를 사용자 프로그램에게 넘긴다.
비동기식 입출력(asynchronous I/O)
I/O 작업이 진행된 후에 해당 작업이 끝나기를 기다리지 않고 CPU를 사용자 프로그램에게 넘기는 것이다.
사용자 프로그램이 Kernel에 I/O 작업을 요청하면 Kernel이 I/O 작업을 수행시키고 다시 CPU를 사용자 프로그램에게 넘겨준 뒤에 I/O interrupt가 들어오면 kernel이 CPU를 점유하여 데이터와 CPU를 다시 사용자 프로그램에게 넘겨준다.
https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC_%EA%B3%84%EC%B8%B5_%EA%B5%AC%EC%A1%B0
code
data
stack
Memory Mapped I/O
I/O Mapped I/O(Port Mapped I/O)
참고 자료
https://velog.io/@sangh00n/User-program-and-System-Call
https://code-lab1.tistory.com/204
http://jidum.com/jidums/view.do?jidumId=467
https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%A7%B5_%EC%9E%85%EC%B6%9C%EB%A0%A5