운영체제란?
모든 프로그램은 실행을 위해 자원을 필요로 한다.
자원 / 시스템 자원
프로그램 실행에 있어 마땅히 필요한 요소
컴퓨터의 네 가지 핵심 부품 포함!
운영체제는
- 실행할 프로그램에 필요한 자원을 할당하고
- 프로그램이 올바르게 실행되도록 돕는
- 특별한 프로그램(커널영역 <= 메모리에 적재되서 실행)
1. 운영체제의 메모리 관리
운영체제는 실행할 프로그램을 메모리에 적재하고,
더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리 자원을 관리합니다.
2. 운영체제의 CPU 관리
보통 프로그램을 실행하면 여러 개의 프로그램을 동시에 실행하게 된다. (브라우저, 메모장, 게임 등등)
사실 컴퓨터 내부에서는 CPU가 우리가 인지하지 못할정도로 아주 빠르게 번갈아 실행되고 있다.
그렇다면 어떤 프로그램부터 CPU를 사용하게 할까? => 운영체제가 할 일
그리고 얼마나 오랫동안 CPU를 이용하게 할까? => 운영체제가 할 일
3. 운영체제의 입출력장치 관리
워드 프로세서와 메모장이 동시에 동일한 프린터를 이용하려는 상황을 생각해 보자.
운영체제는 동시에 두 개의 프로그램이 프린터를 사용하지 못하도록 막고,
하나의 프로그램이 프린터를 이용하는 동안 다른 프로그램은 기다리게 만들어 프린터 자원을 관리한다.
운영체제는 하드웨어와 가까운 곳에 위치해
응용 프로그램과 하드웨어 사이에서 응용 프로그램에 필요한 자원을 할당하고,
응용 프로그램이 올바르게 실행되도록 관리하는 역할을 맡습니다.
운영체제를 알아야 하는 이유
1과 2를 더한 결과를 모니터에 출력하는 간단한 프로그램을 만든다면?
- 프로그램을 메모리에 적재하는 코드
- CPU 로 하여금 1과 2를 더하게 하는 코드
- 모니터에 계산 결과를 출력하는 코드
- ...
이처럼 운영체제 덕분에 개발자는 하드웨어를 조작하는 코드를 직접 작성할 필요가 없다.
운영체제는 사용자를 위한 프로그램은 아니다.
프로그램을 위한 프로그램이다!
그렇기 때문에 프로그램을 만드는 개발자는 운영체제를 알아야 한다.
문제 해결 능력 - 오류 메세지에 대한 깊은 이해를 높일 수 있다.
운영체제의 큰 그림
운영체제의 심장, 커널
운영체제는 현존하는 프로그램 중 규모가 가장 큰 프로그램 중 하나
또 다양한 종류의 운영체제가 있다. (macOS, iOs, Windows...)
운영체제가 제공하는 기능은 다양하다.
하지만 가장 핵심적인 서비스는 존재한다.
- 자원에 접근하고 조작하는 기능
- 프로그램이 올바르고 안전하게 실행되게 하는 기능
이러한 운영체제의 핵심 서비스를 담당하는 부분을 커널(kernel) 이다.
운영체제에는 속하는데 커널에는 속하지 않는 기능
- 유저 인터페이스(UI: User Interface)
- 그래픽 유저 인터페이스(GUI)
- 커맨드라인 인터페이스(CLI)
- 사용자와 컴퓨터 간의 통로일 뿐 운영체제의 핵심 기능(커널)은 아님
이중모드와 시스템 호출
Q. 사용자가 실행하는 프로그램은 자원에 직접 접근할 수 있을까?
A. NO! 응용 프로그램은 자원에 직접 접근은 위험하다.
운영체제는 응용 프로그램들이 자원에 접근하려 할 때
오직 자신을 통해서만 접근하도록 하여 자원을 보호(문지기 역할)
응용 프로그램이 자원에 접근하려면
운영체제에 도움을 요청(= 운영체제의 코드를 실행)해야 한다.
예시) 응용 프로그램이 하드 디스크에 접근할 때
이러한 문지기 역할은 이중 모드로 구현
이중 모드
- CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식
- 사용자 모드
- 운영체제 서비스를 제공받을 수 없는 실행 모드
- 커널 영역의 코드를 실행할 수 없는 실행 모드
- 자원 접근 불가
- 커널 모드
- 운영체제의 서비스를 제공받을 수 있는 실행 모드
- 자원 접근을 비롯한 모든 명령어 실행 가능
이러한 이중 모드는 슈퍼바이저 플래그가 실행중 인지 나타낸다.
시스템 호출
- 커널 모드로 전환하여 실행하기 위해 호출
- 일종의 소프트웨어 인터럽트!
- 시스템 호출이 처리되는 방식은 하드웨어 인터럽트 처리 방식과 유사
해당 포스팅에 나온 글과 이미지들은 강민철 저자님의 혼자 공부하는 컴퓨터 구조 + 운영체제의 책과 강의를 참고하여 만들어졌습니다.
책에서 보다 깊게 나오는 내용이 있으므로 한번 구매하고 보셔도 좋을 것 같습니다.
'CS' 카테고리의 다른 글
[CS] 프로세스 (0) | 2024.05.24 |
---|---|
[CS] 운영체제의 핵심 서비스 (0) | 2024.05.24 |
[CS] 입출력장치 (0) | 2024.05.23 |
[CS] 보조 기억 장치 (0) | 2024.05.23 |
[CS] 메모리, 캐시 메모리 (0) | 2024.05.23 |