모의면접으로 학습하는 CS 스터디
- 운영체제 1주차
운영체제 정의 & 역할
- 운영체제 정의
- 응용 프로그램의 잘못된 동작으로 컴퓨터가 망가지는 것을 막기 위해 컴퓨터 전체를 관리하고 운영하는 소프트웨어
- 운영체제 역할
- 자원 보호
- 악의적인 사용자, 미숙한 사용자에게서 자원 보호, 비정상적인 작업으로부터 컴퓨터 자원을 지킴
- 하드웨어 인터페이스 제공
- 다양한 장치를 일관된 방법으로 사용할 수 있도록 지원
- 다양한 종류의 하드웨어(=다양한 제품)를 사용하는데 그때마다 별도의 소프트웨어를 설치하는 것은 매우 불편함
- 드라이버 설치 필수 : 하드웨어 장치와 상호작용하기 위한 프로그램
- 사용자 인터페이스 제공
- 사용자가 운영체제를 편리하게 사용하도록 지원
- 운영체제가 그래픽 사용자 인터페이스를 제공해 대부분의 작업을 마우스로 수행함
- GUI: 입출력 등의 기능을 알기 쉬운 아이콘 그래픽으로 나타내 사용자가 명령을 선택하면서 작업을 수행하는 상호작용방식
시분할 시스템
- 시분할 시스템
- 정의 : 여러 작업을 조금씩 처리해 작업이 동시에 이루어지는 것처럼 보이게 하는 것
- 타임 슬라이스(=타임 퀀텀) : 잘게 나뉜 시간 한조각
- 멀티프로그래밍 수준(=멀티 프로그래밍정도) : 동시에 실행되는 작업의 개수
ex. 일괄 작업 시스템은 1
- 단점
- 여러 작업을 동시에 처리하기 위한 추가 작업 필요
ex. A작업 → B작업 시 사용자 메모리 정리하는 추가작업 필요.
- 너무 많은 양의 작업이 공존할 경우 중요한 작업이 일정 시간안에 끝나는 것을 보장하지 못함.
다중 프로그래밍 시스템
- 다중 프로그래밍 시스템
-
정의 : 여러개의 프로그램을 하나의 CPU에 적재해 실행
-
한 프로그램을 실행하다 입출력 동작을 하면 CPU는 다른 프로그램을 적재해 실행
-
CPU는 쉬지 않고 계속 작업할 수 있음
-
여러개의 프로그램을 작업 준비상태로 두고 준비상태에 있는 여러 작업 중 하나를 선택하는 데에는 별도의 기법이 필요
-
예시
- A라는 프로그램 실행
- 메인 메모리엔 A라는 프로그램이 적재되어 있어야함
- A 입출력 동작 실행
- CPU는 B라는 프로그램을 실행
대화형 시스템
- 대화형 시스템
- 정의 : 컴퓨터와 사용자의 대화를 통해 작업이 이루어지는 시스템
- 키보드, 모니터의 개발 → 작업 중간에 사용자가 입력, 사용자에게 중간값을 보여줄 수 있게 됨.
- 중간결과값을 통해 프로그램이 정상적으로 작동되는 지 확인할 수 있게 됨.
다중 처리기 시스템
시스템 콜

- 시스템 콜
- 정의 : 커널이 자신을 보호하기 위해 만든 인터페이스
- 컴퓨터 자원 보호를 위해 사용자나 응용 프로그램이 자원에 직접 접근하는 것을 차단.
- 자원 이용하려면 시스템 호출 인터페이스 이용해 접근 필수
- 커널이 제공하는 시스템 관련 서비스를 모아놓은 것이며 함수 형태로 제공.
ex. printf
- 사용자가 자발적으로 커널 영역에 진입할 수 있는 유일한 수단
커널

- 커널 정의
- 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심 기능을 구현한 프로그램
- 운영체제의 성능은 커널이 좌우
- 커널 구조
-
시스템 호출, 드라이버
- 시스템 호출은 반드시 시스템호출을 거쳐야 커널에 진입할 수 있도록 되어있지만 드라이버는 아님.
- 커널이 제공하는 드라이버도 있고 하드웨어 제작자가 제공하는 드라이버도 있기 때문.
- 커널의 주요 역할 :
- 다양한 종류의 프로세스(실행된 프로그램)에 CPU를 배분하고 작업할 수 있는 환경을 만들어주는 것 - 프로세스 관리
- 프로세스를 작업 공간 배치하고 실제 메모리보다 큰 가상공간 제공 - 메모리 관리
- 필요한 입출력 서비스를 제공 - 입출력 관리
- 공동 작업을 위한 각 프로세스 간 통신환경 지원 - 프로세스 간 통신 관리
- 저장장치에 필요한 파일시스템을 만들고 관리하는 일 - 파일 시스템 관리
-
커널의 종류

- 초창기 운영체제 구조
- 모듈들이 구분없이 하나로 구성
- 장점 : 모듈 간 통신 비용이 줄어 효율적 운영 가능
- 단점
- 모든 모듈이 하나로 묶어져 있어 버그, 오류 처리하기 어려움
- 운영체제의 여러 기능이 서로 연결되어 상호 의존성이 높아 기능상 작은 결함이 시스템 전체로 확산될 수 있음
- 다양한 환경 시스템에 적용하기 어려움. 이식성이 낮다
- 현대 운영체제는 매우 크고 복잡해서 이 운영체제를 구현하긴 쉽지 않다.
- 계층형 구조 커널

- 비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만들고 계층 간 통신으로 운영체제 구현
- 윈도우 → 계층형 구조 커널
- 장점 : 버그나 오류를 쉽게 처리할 수 있음. 오류나도 커널이 아닌 해당 계층만 수정하면 되기 때문
- 단점 : 사용자 요구, 다양한 하드웨어 수용을 위해 추가하다보니 커널의 크기가 커지고 하드웨어 용량도 늘어남 → 오류 잡기 어려워짐
- 마이크로 구조 커널

-
프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본적인 기능만 제공. 다른 많은 부분은 사용자영역에 구현
-
마이크로 커널
- 메모리 관리, 프로세스 간 동기화 서비스 제공.
- 메모리 관리자, 동기화 모듈 → 프로세스 간 통신 모듈로 연결. → 모듈 간 정보 교환은 프로세스 간 통신으로 이루어짐
-
장점 :각 모듈은 독립적으로 작동하기 때문에 하나의 모듈이 실패해도 전체 운영체제가 멈추지 않음.
커널모드
유저모드
- 유저 모드
-
정의 : 응용프로그램이 실행되는 모드
-
해당 모드에서 실행되는 코드 특징
- 제한된 권한을 가지며 운영체제의 자원에 직접 접근할 수 없음
- 사용자 작업 처리, 결과 출력하는 등의 기능 수행
- 시스템 안전성, 보안 위해 제한된 자원에만 접근 가능. 커널모드로의 전환을 요청할 수 있음.
-
유저모드와 커널모드 구분
- 프로세스 생성 시엔 유저모드
- 특정 시스템 호출(printf, open 등)이나 예외 상황 발생 시 커널모드로 전환해 작업 수행
폴링
- 풀링
- 정의 : CPU가 직접 입출력 장치에서 데이터를 가져오거나 내보냄.
- CPU는 입출력장치의 상태레지스터를 주기적으로 검사해 명령을 받을 수 있는지 확인. 일정 조건을 만족할 때 처리
- 단점
- CPU 명령어 해석과 실행 + 입출력까지 관여해서 작업 효율이 떨어짐
- 다른 프로세스에게 CPU를 양도하지 않고 하드웨어 장치가 동작 완료하는 동안 하드웨어 상태를 계속 체크. CPU를 많이 낭비하게 됨.
- 그래서 인터럽트 방식 등장
인터럽트
- 인터럽트
- 정의 : 주변 장치의 입출력 요구나 하드웨어의 이상 현상을 CPU에게 알려주는 것
- 하드웨어 인터럽트와 소프트웨어 인터럽트로 나뉨
- IRQ : 고유의 인터럽트 번호가 부여됨
- 인터럽트 벡터 : 여러 개의 인터럽트를 하나의 배열로 만듬. 인터럽트와 인터럽트 핸들러를 일대일로 연결
- 인터럽트 핸들러 : 인터럽트를 처리하기 위한 루틴. 인터럽트 처리를 위해 미리 정의된 함수
- 외부 인터럽트
- 정의 : 하드웨어가 발생시키는 인터럽트
- CPU가 아닌 다른 하드웨어 장치가 CPU에게 어떤 사실을 알려주거나 CPU 서비스를 요청해야할 경우 발생시킴
- 종류 : 전원 이상, 기계 고장, 입출력 등
- 내부 인터럽트
- 정의 : 소프트웨어가 발생시키는 인터럽트
- 종류 : 예외상황(0으로 나누는 경우, 오버플로우 발생. 명령어 잘못 사용 등)
- 인터럽트 처리 과정
- 인터럽트 발생. 현재 실행중인 프로세스 일시 정지. 현재 프로세스 정보는 PCB에 저장
- 인터럽트 컨트롤러 실행. 우선순위 고려해 처리 순서 결정
- 인터럽트 벡터에 등록된 인터럽트 핸들러 실행.
- 인터럽트 핸들러가 처리를 마치면 PCB에 저장된 프로세스 정보를 가져와 다시 실행
DMA
- DMA
- 정의 : 직접 메모리 접근
- 과거엔 폴링방식을 이용했기 때문에 CPU가 메모리, 주변장치에 대한 모든 권한 있음
- 그러나 인터럽트 방식 도입 → 입출력 관리자가 데이터 입출력을 맡게 됨. → 근데 메모리는 CPU만 접근 권한을 가짐. → 그래서 입출력 관리자가 CPU 허락 없이 메모리에 접근할 수 있도록 DMA 권한이 있음.
- 위치 : 입출력 제어기에 DMA 제어기가 있음.
동기식 입출력
- 동기식 I/O

- 정의 : 어떤 프로그램이 입출력 요청했을 때 작업이 완료된 후에 그 프로그램이 후속 작업을 수행할 수 있는 방식
- 읽기작업에 사용
- 디스크, 키보드같은 I/O하드웨어들은 속도가 느려 CPU는 작업을 기다려야하고 기다릴 때 별다른 일을 하지 않음.
=> 그래서 입출력 수행 중엔 CPU를 다른 프로그램에 할당해 CPU가 계속 쉬지 않고 일을 할 수 있도록 함.
- 입출력이 완료될 때까지 CPU가 명령을 수행하지 못하는 프로그램 - 봉쇄상태로 전환.
- 과정
- 사용자가 입출력 요청
- 운영체제의 커널로 CPU 제어권이 넘어와 입출력 처리와 관련된 커널코드 수행
- 입출력 호출한 프로세스 상태를 Blocked 상태로. 입출력 완료될 때까지 CPU 할당 불가
- 입출력 완료되면 I/O컨트롤러가 CPU에게 인터럽트 발생
- blocked 상태인 해당 프로세스에게 CPU할당받을 수 있도록 blocked 상태 해제
- 문제 : 동기성 문제가 생길 수 있음
- 예시
1. 프로그램 A 파일의 내용 1을 3으로 수정하는 I/O 요청. 이를 수행
2. 프로그램 B에게 CPU 할당
3. 프로그램 B는 A가 접근한 파일의 내용을 +1하는 요청.
4. 입출력 컨트롤러가 A,B 요청의 순서를 바꿔 처리할 수 있음 ⇒ 동기성문제
- 해결 : 큐 사용
- 하드웨어 요청들을 큐에 넣어 관리. 큐에 있는 요청을 순서대로 처리해 동기화 문제 해결
비동기식 입출력
- 비동기식 I/O
- 정의 : 입출력 연산을 요청한 후 CPU 제어권을 입출력 연산을 호출한 해당 프로그램에 곧바로 부여
- 주로 입력작업에 많이 사용
- CPU 제어권이 입출력 요청한 프로세스에게 곧바로 다시 주어짐
- 연산이 완료되는 것과 무관하게 처리 가능한 작업부터 처리.