프로그램에 필요한 자원을 할당하고, 올바르게 실행되도록 돕는 프로그램.
특별해서 메모리의 사용자 영역이 아닌, 따로 커널 영역이라는 곳에 할당됨.
운영체제는 인터넷 브라우저, 메모장 등 프로그램이 실행되면 메모리의 비어있는 공간에 배치하고, 프로그램이 종료되면 메모리에서 제거해준다.
운영체제는 CPU를 관리하기도 한다.동시에 여러 프로그램을 실행하면, CPU는 아주 아주 빠르게 그들을 돌리고 있는 중인 것이다. 운영체제는 CPU의 우선순위, 어떤 프록램을 얼마나 오래 점유할지를 결정해준다.
그 밖에도 입출력장치와 보조기억장치를 관리한다.
정리하자면 모든 응용프로그램과 하드웨어(CPU,메모리,하드디스크 등 컴퓨터의 자원)의 중간 관리자!
예를 들어, 1과 2를 더한 결과를 모니터에 출력하는 프로그램을 제작한다고 하자.
만약 운영체제가 없으면 프로그램을 메모리에 적재하고, CPU가 1과 2를 더하게 하고, 모니터에 계산 결과를 출력하고 하는 모든 코드를 직접 작성해야 한다.
운영체제 덕분에 하드웨어를 직접 조작하는 코드를 짜지 않아도 된다.
개발자로서, 내가 개발한 프로그램이 문제가 생긴다면 운영체제가 가장 먼저 알아차린다. 여러 오류 메세지들도 운영체제가 보내는 메세지이기 때문에, 운영체제에 대해 알고 있다면 문제 해결 능력을 기를 수 있다.
이제 운영체제에 대해 자세히 공부해보자.
운영체제는 아주 방대하고, 다양한 기능을 제공하지만 가장 핵심적인 서비스는 프로그램들을 올바르게 실행되게 하는 서비스이다. 이런 핵심기능을 담당하는 부분을 커널이라고 한다.
예를 들어 운영체제에는 속하는데, 커널에는 속하지 않는 부분은 UI가 있다.
응용 프로그램들이 CPU에 직접 접근하게 하는 것은 위험하다. 반드시 운영체제를 거쳐서 접근해야한다. 이러한 문지기 역할을 이중모드로 해결한다.
이중모드란, CPU가 명령어를 실행하는 모드를 사용자 모드와 커널 모드로 구분하는 방식이다.
운영체제의 서비스를 제공받을 수 없음.
커널 영역의 코드를 실행할 수 없음.
자원 접근 불가
운영체제의 서비스를 제공받을 수 있고, 자원접근을 비롯한 모든 명령어 실행 가능
시스템 호출을 하면 커널 모드로 전환할 수 있다. 응용 프로그램에서 시스템 호출을 하면, 운영체제 코드가 실행되고, 다시 시스템 호출이 복귀되어 사용자 모드로 돌아가는 과정을 거친다.
프로세스는 실행중인 프로그램이다. 수 많은 프로세스들이 동시에 진행되는데, 운영체제는 이렇게 동시다발적으로 생성/실행/삭제되는 많은 프로세스들을 관리해준다.
모든 프로세스는 실행되기 위해 CPU가 필요하다. 이를 공평하게 나누는 것을 스케줄링이라고 한다.
새 프로세스를 적재할때, 비어있는 공간을 만들어 적당한 위치에 담는 것을 관리한다. 때로는 실행하고자 하는 프로세스가 메모리보다 클 때, 실행이 가능해지도록 만들기도 한다.
관련된 정보를 파일이라는 단위로 저장 장치에 보관하고, 또 이 파일들을 모아 디렉토리 단위로 저장 장치에 보관하게 된다.