운영체제란 ?
- 맥 OS, 윈도우, 리눅스, 유닉스 등을 운영체제라 부른다.
- 운영체제 또한 소프트웨어이다.
- 하드웨어의 자원을 효율적으로 관리하며 사용자가 컴퓨터를 편리하게 사용할 수 있도록 해주는 인터페이스
- 메모리, 시스템 자원 등을 효율적으로 분배해주는 일꾼
- 즉, 컴퓨터 사용자와 하드웨어 간의 인터페이스로써 동작하는 시스템 소프트웨어의 일종
- Application이 하드웨어를 직접 다루는 것은 어려우니 OS가 중간다리 역할을 한다.
- Application: 한글, 엑셀, 메모장 등 프로그램들

https://goodmilktea.tistory.com/23
운영체제의 목적
운영체제 성능 평가 기준
- 처리능력 (Throughput) : 일정 시간 내에 시스템이 처리하는 일의 양
- 반환시간 (Turn Around Time) : 작업이 완료되기까지 걸린 식나
- 사용기능도 (Availability) : 시스템을 사용할 필요가 있을 때 즉시 사용 가능한 정도
- 신뢰도 (Reliability) : 시스템이 문제를 얼마나 정확하게 해결하는지를 나타내는 정도
운영체제의 목적은 처리능력 향상, 반환시간 단축, 사용기능도 향상, 신뢰도 향상이라 볼 수 있다.
운영체제의 구성
- 제어프로그램(control) - 컴퓨터 내부 정보 및 자원을 제어, 상태를 감시하고 실행 과정을 지시 및 관리
- 감시 프로그램 - 시스템 전체 동작 상태를 감독 및 지원
- 수퍼바이저 (Supervisor) : 시스템의 모든 동작 상태를 관리 및 감독하는 제어프로그램
- 작업 관리 프로그램 - 어떤 작업을 처리하고 다음 작업 이행을 위한 준비 및 처리
- 데이터 관리 프로그램 - 메인메모리 및 외부 보조 기억 장치 사이 데이터 전송 등
- 처리프로그램(process) - 실제 데이터 처리를 실행하고 결과를 보여줌
- 언어 번역 프로그램 - 프로그램을 컴퓨터가 알 수 있는 기계어로 변역시키는 프로그램
- 서비스 프로그램 - 사용 빈도 높은 프로그램을 개발하여 놓은 프로그램
- 디버깅 프로그램, 정렬 프로그램, 라이브러리 등
- 문제 처리 프로그램 - 사용자가 필요한 업무에 맞도록 개발한 프로그램
운영체제의 역할
프로세스 관리
- 현재 프로세서(CPU)를 점유할 프로세스를 정하고, 실제로 CPU를 프로세스에 할당, 프로세스 간 공유 자원 접근 및 통신을 관리
- cf) 프로세스란 운영체제에서 동작하는 응용 프로그램
- cf) 프로세서 (CPU)와 프로세스는 다름
- 프로세스, 스레드, 스케줄링, 동기화, ICP 통신 등을 담당
저장장치 관리
- 주기억 장치 (Main Memory) 및 보조기억장치 (하드디스크)를 관리하는 기능
- 주기억장치
- 프로세스에 할당하는 메모리 할당 및 해제
- 메모리 간 침범 방지
- 가상메모리 사용
- 보조기억장치
- 메모리 관리, 가상 메모리 사용, 파일 시스템 등을 담당
네트워킹
- 응용 프로그램이 네트워크를 사용하려면, 운영체제에서 네트워크 프로토콜을 지원해야함
- TCP/IP, 기타 프로토콜
사용자 관리
- 한 컴퓨터를 여러 사람이 사용하는 환경도 지원
- 각 계정을 관리하는 기능
디바이스 드라이버
- 시스템에 여러 하드웨어가 붙어있음
- 이를 운영체제에서 사용할 수 있도록 해야함
- 이를 가능하게 하게끔 중간 interface 역할을 하는 것이 디바이스 드라이버
커널(Kernel) 이란?
- 컴퓨터 전원을 켜면 운영체제가 동시에 수행됨
- 그러나 운영체제와 같이 큰 프로그램을 모두 메모리에 로드할 시 메모리 낭비가 심각함
- 따라서 항상 필요한 부분만 전원 켜짐과 동시에 메모리에 올려두고, 그 외에는 필요할 때 메모리에 로드
- 이때 메모리에 로드되는 부분을 커널이라고 함
- 즉, 커널은 메모리에 항상 상주하는 부분으로 운영체제의 핵심적인 부분을 뜻함
Dual 모드란?
✨ Dual 모드는 말 그대로 모드를 아래와 같이 둘로 나누는 것이다.
- 사용자(User) 모드
- 커널(Kernel) 모드 = 관리자(Supervisor) 모드 = 시스템(system) 모드 = 모니터(monitor) 모드 = 특권(privileged) 모드
-
CPU(프로세서)는 Application이 시스템을 손상시키는 것을 방지하기 위해 몇가지 모드를 제공한다. CPU 내부의 레지스터(register)의 modebit로 구분하여 0은 ‘커널모드’, 1은 ‘사용자 모드’로 나눠서 작동한다.
-
사용자가 하드웨어의 자원에 접근하는 것은 매우 위험하므로 모두 커널 모드로 운영체제에서 처리하도록 한다.
-
파일을 입출력, 메세지 출력 등 많은 부분에 커널 모드를 사용한다.
-
프로그램에서 소프트웨어 인터럽트를 발생시켜 운영체제에 위임한다.
사용자모드(User Mode)
- 사용자 모드에서 사용자 Application 코드가 실행될 때, 하드웨어에 접근할 수 없다.
- 접근을 하기 위해서는 시스템 콜을 사용해야한다.
커널모드
- 운영체제가 CPU를 사용하는 모드이다. 시스템 콜을 통해 커널 모드로 전환이 되면, 하드웨어를 제어하는 명령어(Privileged Instructions)를 실행한다. Privileged Instructions는 STOP, HALT, RESET, SET_TIMER 등이 있다. 만약 사용자 모드에서 특권 명령을 사용하려고 하면 CPU에서 내부 인터럽트(Exception)를 발생시켜 해당 명령어를 요청한 프로그램을 강제로 종료시킨다.

https://codybuilder.com/41
시스템 콜
- OS는 직접 하드웨어를 관리할 수 있는 반면, 응용 프로그램 들은 OS가 제공하는 인터페이스를 통해서만 자원에 접근이 가능하다. 이러한 인터페이스를 시스템 콜이라 한다.
- 시스템 콜은 커널 영역의 기능을 사용자 모드에서도 사용 가능하게 해준다.
- 즉, 프로세스가 하드웨어에 직접 접근하여 필요한 기능을 사용할 수 있게끔 해준다.
- 추가적으로, 시스템 콜은 소프트웨어 인터럽트의 한 종류이다.
- 소프트웨어 인터럽트에는 고유한 번호가 존재한다.
- 이러한 고유한 번호는 IDT(Interrupt Descriptor Table)이라는 곳에 저장되어 잇다.
- 인터럽트가 발생하면 IDTR 레지스터에 IDT 위치가 명시되어 있고, 이를 통해 확인 및 처리한다.
시스템 콜의 종류

https://codybuilder.com/41
시스템 콜의 예시

- 라이브러리 함수(prinf)를 호출한다.
- 시스템 콜 write()를 호출한다.
- eax 레지스터에 해당 시스템 콜의 인덱스(4)를 저장한다.
- 0x80 인터럽트를 발생시킨다. -> 커널 모드로 전환
- IDT를 참조하여 system_call()을 호출한다
- eax 레지스터에 저장되어 있는 시스템 콜 인덱스를 system_call 함수로 전달한다.
- sys_call_table에서 인덱스에 맞는 sys_write를 호출한다.
- 작업을 마친 뒤 사용자 모드로 돌아간다.
컴퓨터 기본구조
예상질문
- 시스템 콜이 무엇인지 설명해 주세요.
- 우리가 사용하는 시스템 콜의 예시를 들어주세요.
- 시스템 콜이, 운영체제에서 어떤 과정으로 실행되는지 설명해 주세요.
- 시스템 콜의 유형에 대해 설명해 주세요.
- 운영체제의 Dual Mode 에 대해 설명해 주세요.
- 서로 다른 시스템 콜을 어떻게 구분할 수 있는지 설명해 주세요.
출처