JSCODE 모의면접 스터디
운영체제 6기 1주차
목차
1. 운영체제
운영체제(Operating System)란 사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 소프트웨어이다.
Ex) Window, Mac OS, Linux 등
운영체제의 역할
1. 시스템 자원 관리
컴퓨터의 하드웨어(CPU, 메모리, 입출력장치 등)를 효율적으로 관리하고 보호한다.
시스템 자원이 낭비되는 것을 방지하고 원활하게 사용할 수 있도록 관리한다.
2. 인터페이스 제공
사용자가 컴퓨터를 편리하게 사용할 수 있도록 GUI (Graphical User Interface) 또는 CLI (Command Line Interface) 와 같은 사용자 인터페이스를 제공한다.
다양한 하드웨어를 사용하기 위한 인터페이스와 드라이버를 지원한다.
3. 응용 프로그램 제어
프로그램들이 요청하는 시스템 자원을 효율적으로 분배하고 지원한다.
메모리 접근, 파일 저장, 입출력 장치 사용 등 프로그램 실행에 필요한 자원을 관리한다.
여러 프로그램이 동시에 실행될 때 충돌없이 안정적으로 동작하도록 제어한다.
2. 운영체제의 주요 처리 방식
시분할 시스템 (Time Sharing System)
시분할 시스템은 CPU 시간을 작은 단위로 분할하여 여러 사용자가 동시에 컴퓨터를 사용할 수 있게 하는 현대 운영체제의 기본 운영 방식이다. 라운드 로빈(Round Robin) 방식이라고도 한다.
하나의 CPU는 같은 시점에서 여러 개의 작업을 동시에 수행할 수 없기 때문에, CPU의 전체 사용시간을 작은 작업 시간량으로 쪼개어 그 시간량 동안만 번갈아가며 CPU를 할당하여 각 작업을 처리한다.
- 여러 사용자가 각자의 단말장치를 통해 동시에 시스템 사용
- CPU 시간을 작은 단위로 나누어 여러 작업에 번갈아가며 할당
- 모든 작업이 동시에 처리되는 것처럼 보이는 대화식 처리 방식
다중 프로그래밍 시스템 (Multi-Programming System)
여러 개의 프로그램을 메모리에 동시에 올려두고 실행하는 방식이다. CPU가 하나의 프로그램을 처리하는 동안 다른 프로그램의 입출력 작업이 동시에 이루어질 수 있도록 하여 CPU 사용률을 높인다.
- 여러 프로그램을 메모리에 동시에 올려두고, 하나의 프로그램이 대기 상태가 되면 다른 프로그램을 실행하는 방식
- CPU가 쉬지 않고 계속 일할 수 있도록 하여 CPU 사용 효율을 높임
- 작업 스케줄링(작업 저장소 -> 메모리)과 CPU 스케줄링(메모리 -> CPU)을 통해 작업을 관리
대화형 시스템 (Interactive System)
사용자가 컴퓨터와 직접 대화하듯이 명령을 입력하면 즉시 처리 결과를 받을 수 있는 시스템이다.
- 사용자의 명령에 즉각적으로 반응
- 실시간으로 입력과 출력이 가능
- 대화식 사용자 인터페이스 제공
다중 처리기 시스템 (Multi-Processor System)
하나의 컴퓨터 시스템 내에 여러 개의 CPU와 하나의 주기억장치를 두어 여러 프로그램을 동시에 처리하는 시스템
- 여러 CPU가 하나의 메모리를 공유하며 단일 운영체제로 관리
- CPU 고장 시에도 다른 CPU로 작업 처리 가능
- 처리 속도는 빠르나 자원 공유 문제 해결 필요
간단 정리
- 시분할 시스템: CPU 시간을 분할하여 동시 사용을 가능하게 하는 기본 방식
- 다중 프로그래밍 시스템: 메모리 활용을 최적화하여 CPU 효율을 높이는 방식
- 대화형 시스템: 사용자와의 실시간 상호작용을 가능하게 하는 방식
- 다중 처리기 시스템: 여러 CPU를 활용하여 실제 동시 처리를 구현하는 방식
3. 운영체제의 구조 및 모드
커널 (Kernel)
커널은 운영체제의 핵심 부분으로, 컴퓨터 시스템 자원을 직접 관리하고 보호하는 역할을 한다.
응용 프로그램이 자원에 직접 접근하는 것을 방지하고, 반드시 커널을 통해서만 자원에 접근할 수 있도록 문지기 역할을 수행한다.
커널 모드 vs 유저 모드
운영체제는 CPU 실행 모드를 커널 모드와 유저 모드로 구분하는 이중 모드(dual mode)로 동작한다. 즉, 운영체제의 문지기 역할이 이중 모드로써 구현된다.
CPU는 명령어를 유저 모드 또는 커널 모드로써 실행할 수 있다.
1. 커널 모드(kernel mode)
운영체제 서비스를 제공받을 수 있는 실행 모드로, 모든 종류의 명령어를 수행할 수 있는 모드이다.
- 커널 영역의 코드 실행 가능
- 모든 시스템 자원에 직접 접근 가능
- 시스템의 모든 명령어 실행 가능
2. 유저 모드(user mode)
운영체제 서비스를 제공받을 수 없는 실행 모드로, 일반적인 응용 프로그램이 기본적으로 실행되는 모드이다.
- 커널 영역의 코드를 실행할 수 없음
- 시스템 자원에 직접 접근 불가능
- 자원 접근 시 반드시 운영체제에 도움을 요청해야 함
- CPU가 입출력 명령어와 같은 시스템 자원 접근 명령어 실행 불가
두 모드는 CPU 플래그 레지스터의 슈퍼바이저 플래그(1: 커널 모드, 0: 유저 모드)로 구분된다.
4. 시스템 콜 (System Call)
시스템 콜은 프로그램이 운영체제의 커널에게 서비스를 요청하는 인터페이스이다. 사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 시스템 콜을 통해 커널 모드로 전환되어야 한다.
시스템 콜은 API를 통해 운영체제의 서비스를 사용자 프로그램에 제공하며, 시스템 리소스 접근과 같은 중요한 동작은 반드시 커널 모드에서 실행된다. 이를 통해 사용자 프로그램과 운영체제 간의 안전하고 효율적인 상호작용이 가능해진다.
시스템 콜의 동작 과정
- 응용 프로그램이 API 함수(*시스템 콜 래퍼 함수)를 호출
- 사용자 모드에서 커널 모드로 전환
- 커널이 요청된 서비스를 처리
- 결과를 반환하고 사용자 모드로 복귀
*시스템 콜 래퍼 함수: 시스템 콜을 좀 더 쉽게 사용할 수 있도록 제공되는 함수
예시) C언어의 파일 열기: fopen() API 함수 -> open() 시스템 콜
시스템 콜 유형
- 프로세스 제어: 프로세스 실행, 생성, 대기 등
- 파일 조작: 파일 열기, 읽기, 쓰기 등
- 장치 관리: 디바이스 부착, 분리, 읽기, 쓰기 등
- 정보 유지: 시간, 날짜 설정 등
- 통신: 통신 연결 생성, 제거, 상태 정보 전달 등
5. 입출력 처리 방식
입출력 처리는 기본적으로 주기억장치(메모리)와 입출력 장치(하드디스크, 키보드 등) 간의 데이터 전송을 의미한다.
입출력 처리 방식은 CPU가 어떻게 입출력을 처리/제어하는가에 대한 방식이다.
폴링 (Polling)
폴링은 CPU가 직접 입출력 장치의 상태를 주기적으로 확인하여 데이터를 처리하는 방식이다.
CPU가 입출력 명령을 만나면 해당 장치의 준비 상태를 지속적으로 확인하면서 조건이 만족될 때 데이터를 처리한다.
- CPU가 모든 입출력 처리를 직접 담당
- 하드웨어 구현이 단순하고 간단함
- 입출력 작업 중 다른 작업 수행 불가 -> 작업 효율 떨어짐
- 입출력 장치 수가 증가할수록 성능 저하
인터럽트 (Interrupt)
인터럽트는 컴퓨터 작업 도중 커널의 처리가 필요할 때 CPU에게 알리는 것을 말한다.
CPU가 프로그램을 실행하고 있는 중에 입출력 요청, 타이머, 예외 상황 등 시스템에서 처리해야 할 요청이나 사건이 발생할 때, CPU가 현재 실행 중인 작업을 일시 중단하고 해당 요청을 우선 처리한 후 원래 작업으로 복귀한다.
하드웨어 장치나 소프트웨어가 CPU의 서비스가 필요한 경우, 인터럽트 신호를 통해 알리게 된다. CPU는 매번 명령을 수행하기 전에 인터럽트 신호가 발생했는지 검사한다.
하드웨어 인터럽트 (외부 인트럽트)
입출력 처리 방식에서의 인터럽트는 하드웨어 인터럽트의 한 종류로, 입출력 장치가 CPU에 처리 요청을 하는 방식이다.
하드웨어 인터럽트는 CPU가 아닌 다른 하드웨어 장치가 CPU에 서비스를 요청하는 경우 발생한다.
입출력 장치나 타이머와 같은 하드웨어 장치가 인터럽트 라인을 활성화하여 CPU에게 이를 통보하는 방식이다.
ex) 입출력 장치의 데이터 입출력 완료 알림, 타이머 인터럽트, 키보드나 마우스 입력, 하드웨어 오류 발생 등
소프트웨어 인터럽트 (내부 인터럽트)
소프트웨어 인터럽트는 CPU가 명령어를 수행하던 중 처리할 수 없는 명령이나 상황을 만나면 발생한다.
CPU는 시스템 콜이나 예외 상황을 감지하여 소프트웨어 인터럽트를 발생시킨다.
ex) 시스템 콜 (파일 열기, 메모리 할당 등), 페이지 폴트, 잘못된 메모리 참조 등
인터럽트 처리 과정
- 인터럽트 발생 (예: 프로세스의 시스템 콜)
- CPU는 현재 실행 중인 명령어를 완료하고 프로세스를 중단
- 현재 프로세스의 상태(메모리 주소, 레지스터 값 등)을 PCB에 저장
- 인터럽트 벡터를 통해 ISR 주소를 확인하고 해당 루틴 실행
- 인터럽트 처리 완료 후 PCB에서 프로세스 정보를 복원
- IRET 명령어로 인터럽트를 해제하고 이전 프로세스로 복귀
DMA (Direct Memory Access)
기존 입출력 방식
입출력 장치의 데이터는 시스템 버스를 통해 CPU 레지스터로 이동한 후, 다시 시스템 버스를 통해 메모리로 전송된다.
이 과정에서 발생하는 잦은 인터럽트로 인해 CPU 효율성이 저하된다.
DMA 방식
DMA 방식은 DMA 컨트롤러가 CPU의 개입을 최소화하여 입출력 장치와 메모리 간의 데이터를 직접 전송하는 방식이다.
CPU는 전송 시작 시점에 DMA 컨트롤러에 데이터 전송을 위한 제어 정보(메모리 주소, 전송할 데이터 크기, 전송 방향)를 설정하고 전송 시작을 명령한다. 이후 DMA 컨트롤러가 독립적으로 블록 단위의 데이터 전송을 수행하며, 이때 시스템 버스 사용에서 CPU보다 우선순위를 갖는다(사이클 스틸링). 블록 단위의 데이터 전송이 완료되면 DMA 컨트롤러는 CPU에 인터럽트를 발생시켜 전송 완료를 알린다.
- 입출력을 위한 인터럽트 횟수를 최소화
- CPU 효율성 향상
- 빠른 입출력 장치(디스크, 테이프 등)의 성능 개선
입출력 처리 방식 비교
방식 | 특징 | CPU 개입 |
폴링 | CPU가 지속적으로 상태 확인 | 항상 필요 |
인터럽트 | 입출력 장치가 처리 요청 시 CPU에 알림 (하드웨어 인터럽트의 일종) |
요청이나 발생 시 |
DMA | DMA 컨트롤러가 데이터 전송 담당 | 전송 시작, 완료 시에만 |
6. 입출력 동기화 방식
입출력 동기화 방식은 프로그램과 입출력 작업 간의 실행 시점을 어떻게 맞추는가에 대한 방식이다.
동기식 I/O (Synchronous I/O)
입력이나 출력을 요청한 후에 그 작업이 완료될 때까지 프로그램이 대기하는 방식이다.
순차적 처리가 필요하거나 간단한 입출력 작업에 사용한다.
동작 과정
- 프로그램이 입출력 요청 시 CPU 제어권이 커널로 넘어감
- 요청한 작업은 입출력 완료까지 봉쇄 상태로 전환
- 입출력 완료 시 인터럽트를 통해 봉쇄 상태 해제
비동기식 I/O (Asynchronous I/O)
입력이나 출력을 요청한 후에 CPU 제어권을 바로 반환받아 다른 작업을 수행하는 방식이다.
다중 작업 처리나 긴 입출력 작업이 필요한 경우 사용한다.
동작 과정
- 프로그램이 입출력 요청 후 바로 CPU 제어권을 반환받음
- 입출력 작업과 무관하게 다른 작업 처리 가능
- 입출력 완료 시 인터럽트로 알림
입출력 처리 방식 vs 입출력 동기화 방식
- 입출력 처리 방식: CPU가 어떻게 입출력을 처리/제어할 것인가 -> 폴링, 인터럽트, DMA
- 입출력 동기화 방식: 프로그램이 입출력 작업 완료를 어떻게 기다릴 것인가 -> 동기식 I/O와 비동기식 I/O
REF
https://buly.kr/5q665dh
https://buly.kr/6Bvc3HD
https://pinelover.tistory.com/153
https://growth-coder.tistory.com/140
https://c4u-rdav.tistory.com/85
https://huhspunk.tistory.com/5
https://structuring.tistory.com/119
https://naeunbi698.tistory.com/195
https://harveywoods.tistory.com/entry/OS-Synchronous-IO%EC%99%80-Asynchronous-IO
'Study > 운영체제' 카테고리의 다른 글
[운영체제] 가상 메모리 (2) - 성능 최적화와 관리 기법 (0) | 2024.12.02 |
---|---|
[운영체제] 가상 메모리 (1) - 기본 개념과 구현 방식 (0) | 2024.11.24 |
[운영체제] 프로세스 동기화 (0) | 2024.11.19 |
[운영체제] CPU 스케줄링 (0) | 2024.11.12 |
[운영체제] 프로세스와 스레드 (0) | 2024.11.07 |
댓글