# 운영체제
## 운영체제란?

- 컴퓨터 하드웨어와 소프트웨어 리소스를 관리하고, 사용자와 컴퓨터 사이의 인터페이스 역할을 하는 시스템 소프트웨어
- 자원을 효율적으로 관리하고, 사용자와 시스템 간의 상호 작용을 용이하게 하며, 애플리케이션 실행에 필요한 환경을 제공한다.
- 컴퓨터의 기본적인 기능을 제어하며, 프로그램 실행, 파일 관리, 메모리 관리, 입출력 관리 등 다양한 기능을 제공한다
- 운영체제도 프로그램이기 때문에 여타 프로그램들과 같이 메모리에 적재된다
> 운영체제를 알아야 하는 이유
>
> - 운영체제는 사용자를 위한 프로그램이라기 보다 프로그램을 위한 프로그램이라고 할 수 있다
> - 따라서 프로그램을 만드는 개발자는 운영체제의 동작 원리를 알아야 한다
### 운영체제의 목적
- 프로세스 관리: 프로세스의 생성, 스케줄링, 종료 등을 관리한다.
- 메모리 관리: 프로그램이 실행될 때 필요한 메모리 공간을 할당하고, 사용이 끝난 메모리를 회수한다.
- 파일 시스템 관리: 파일 생성, 삭제, 수정 등의 파일 시스템 관리 기능을 제공한다.
- 입출력 시스템 관리: 키보드, 마우스, 프린터 등 다양한 입출력 장치를 관리한다.
- 보안 및 접근 제어: 시스템의 보안을 유지하고, 사용자의 접근을 제어한다.
### 운영체제의 핵심 서비스
- 자원 접근 및 할당
- CPU 스케쥴링 : 어떤 프로세스를 먼저, 얼마나 오래 실행시킬지
- 메모리 : 페이징, 스와핑
- 입출력 장치 : 인터럽트 서비스 루틴
- 파일 시스템 관리
- 관련된 정보를 파일이라는 단위로 저장 장치에 보관
- 파일들을 묶어 폴더(디렉토리) 단위로 저장 장치에 보관
## 커널

- 운영체제의 핵심 서비스를 담당하는 부분을 커널이라고 부른다
- 운영체제의 심장이라고 한다
- 핵심 서비스 : 프로세스 관리, 메모리 관리, 파일 시스템 관리, 입출력 관리 등
### 이중모드와 시스템 호출
- 사용자가 실행하는 프로그램은 자원에 직접 접근할 수 없다
- 이를 위반하면 시스템이 불안정해질 수 있다
- 예를 들어 두 프로세스가 하나의 파일에 쓰기 작업을 할 경우, 파일의 내용이 꼬일 수 있다. (덮어쓰기 등 발생 가능)
- 운영체제는 응용프로그램들이 자원에 접근하려 할 때, **오직 자신을 통해서만 접근을 가능하도록 하여 작원을 보호**한다.
- 자원에 접근하려면 운영체제의 도움을 요청(= 운영체제의 코드를 실행) 해야한다.
### 이중모드란?

- CPU가 명령을 실행하는 모드를 **사용자 모드**와 **커널 모드**로 구분하는 방식
- 사용자 모드
- 운영체제의 서비스를 제공받을 수 없는 실행 모드
- 커널 영역의 코드를 실행할 수 없는 실행 모드
- 자원 접근 불가
- 커널 모드
- 운영체제의 서비스를 제공받을 수 있는 실행 모드
- 자원 접근을 비롯한 모든 명령어 실행 가능
### 시스템 호출

- 커널모드로 전환하여 실행하기 위한 호출
- 운영체제 서비스를 제공받기 위해 커널모드로 전환하려면 시스템 호출을 사용해서 커널모드로 전환한다.
- 
- 시스템 호출은 인터럽트를 발생시켜 커널모드로 전환한다.
- 인터럽트 : CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 때, 현재 실행중인 프로그램을 중단하고, 운영체제의 코드를 실행하는 것
- 
- 일반적으로 실행하는 프로그램은 자원에 빈번하게 접근하기 때문에 시스템 호출을 많이 사용한다.
- 