# 운영체제 ## 운영체제란? ![](https://i.imgur.com/bNvG27j.png) - 컴퓨터 하드웨어와 소프트웨어 리소스를 관리하고, 사용자와 컴퓨터 사이의 인터페이스 역할을 하는 시스템 소프트웨어 - 자원을 효율적으로 관리하고, 사용자와 시스템 간의 상호 작용을 용이하게 하며, 애플리케이션 실행에 필요한 환경을 제공한다. - 컴퓨터의 기본적인 기능을 제어하며, 프로그램 실행, 파일 관리, 메모리 관리, 입출력 관리 등 다양한 기능을 제공한다 - 운영체제도 프로그램이기 때문에 여타 프로그램들과 같이 메모리에 적재된다 > 운영체제를 알아야 하는 이유 > > - 운영체제는 사용자를 위한 프로그램이라기 보다 프로그램을 위한 프로그램이라고 할 수 있다 > - 따라서 프로그램을 만드는 개발자는 운영체제의 동작 원리를 알아야 한다 ### 운영체제의 목적 - 프로세스 관리: 프로세스의 생성, 스케줄링, 종료 등을 관리한다. - 메모리 관리: 프로그램이 실행될 때 필요한 메모리 공간을 할당하고, 사용이 끝난 메모리를 회수한다. - 파일 시스템 관리: 파일 생성, 삭제, 수정 등의 파일 시스템 관리 기능을 제공한다. - 입출력 시스템 관리: 키보드, 마우스, 프린터 등 다양한 입출력 장치를 관리한다. - 보안 및 접근 제어: 시스템의 보안을 유지하고, 사용자의 접근을 제어한다. ### 운영체제의 핵심 서비스 - 자원 접근 및 할당 - CPU 스케쥴링 : 어떤 프로세스를 먼저, 얼마나 오래 실행시킬지 - 메모리 : 페이징, 스와핑 - 입출력 장치 : 인터럽트 서비스 루틴 - 파일 시스템 관리 - 관련된 정보를 파일이라는 단위로 저장 장치에 보관 - 파일들을 묶어 폴더(디렉토리) 단위로 저장 장치에 보관 ## 커널 ![](https://hackmd.io/_uploads/SJaqtj-Ta.png) - 운영체제의 핵심 서비스를 담당하는 부분을 커널이라고 부른다 - 운영체제의 심장이라고 한다 - 핵심 서비스 : 프로세스 관리, 메모리 관리, 파일 시스템 관리, 입출력 관리 등 ### 이중모드와 시스템 호출 - 사용자가 실행하는 프로그램은 자원에 직접 접근할 수 없다 - 이를 위반하면 시스템이 불안정해질 수 있다 - 예를 들어 두 프로세스가 하나의 파일에 쓰기 작업을 할 경우, 파일의 내용이 꼬일 수 있다. (덮어쓰기 등 발생 가능) - 운영체제는 응용프로그램들이 자원에 접근하려 할 때, **오직 자신을 통해서만 접근을 가능하도록 하여 작원을 보호**한다. - 자원에 접근하려면 운영체제의 도움을 요청(= 운영체제의 코드를 실행) 해야한다. ### 이중모드란? ![](https://hackmd.io/_uploads/BkYtNt4aT.png) - CPU가 명령을 실행하는 모드를 **사용자 모드**와 **커널 모드**로 구분하는 방식 - 사용자 모드 - 운영체제의 서비스를 제공받을 수 없는 실행 모드 - 커널 영역의 코드를 실행할 수 없는 실행 모드 - 자원 접근 불가 - 커널 모드 - 운영체제의 서비스를 제공받을 수 있는 실행 모드 - 자원 접근을 비롯한 모든 명령어 실행 가능 ### 시스템 호출 ![image](https://hackmd.io/_uploads/HyqJ6iZTa.png) - 커널모드로 전환하여 실행하기 위한 호출 - 운영체제 서비스를 제공받기 위해 커널모드로 전환하려면 시스템 호출을 사용해서 커널모드로 전환한다. - ![image](https://hackmd.io/_uploads/Hy2j5iWaT.png) - 시스템 호출은 인터럽트를 발생시켜 커널모드로 전환한다. - 인터럽트 : CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 때, 현재 실행중인 프로그램을 중단하고, 운영체제의 코드를 실행하는 것 - ![image](https://hackmd.io/_uploads/H10nJ3-ap.png) - 일반적으로 실행하는 프로그램은 자원에 빈번하게 접근하기 때문에 시스템 호출을 많이 사용한다. - ![image](https://hackmd.io/_uploads/r177l2Wap.png)