운영체제의 정의
운영체제는 사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 소프트웨어이다.
운영체제는 응용 프로그램이나 사용자에게 컴퓨터 자원을 사용할 수 있는 인터페이스를 제공하고 그 결과를 돌려준다. 그리고 응용 프로그램이나 사용자에게 모든 컴퓨터 자원을 숨기고 정해진 방법으로만 컴퓨터 자원을 사용할 수 있도록 제한한다. 하드웨어에 대한 모든 책임을 맡고 있는 운영체제를 거치지 않고는 하드웨어에 접근할 수 없다.
1. 컴퓨터 자원을 사용할 수 있는 환경 제공
2. 컴퓨터 자원 관리
< 운영체제를 이용하는 예시 >
- 사용자가 fopen, fwrite 따위의 함수로 파일 열기나 쓰기를 요청하면 운영체제는 하드디스크에 있는 파일을 대신 꺼내주거나 저장한다. (CLI 환경)
- 사용자가 마우스 아이콘으로 파일을 드래그해서 휴지통으로 이동하면 운영체제는 하드디스크에 있는 파일을 대신 삭제한다. (GUI 환경)
운영체제의 구조
커널: 운영체제의 핵심적인 기능을 모아놓은 것(프로세스 관리, 메모리 관리, 저장장치 관리 등)
인터페이스: 커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할
Ex) Linux Shell
시스템 호출: 사용자나 응용 프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근하는 것을 차단하는 역할, 커널의 인터페이스 (비유하면 카페가 커널이면 시스템 호출은 종업원)
[ 시스템 호출을 통한 접근: 커널이 제공하는 write()함수를 사용하여 데이터를 저장해달라고 요청 ]
드라이버: 커널과 하드웨어의 인터페이스 담당
커널의 구성
프로세스 관리 – 프로세스에 CPU 배분
메모리 관리 – 프로세스에 작업 공간을 배치
파일 시스템 관리, 입출력 관리, 프로세스 간 통신 관리
단일형 구조 커널
초창기의 구조로 커널의 핵심 기능을 구현하는 모듈들이 하나로 구성되어 있다.
장점: 모듈 간의 통신 비용이 줄어들음
단점: 모든 모듈이 하나로 묶여 있기 때문에 버그나 오류를 처리하기가 어려움,
현대의 운영체제는 매우 크고 복잡하기 때문에 완전 단일형 구조의 운영체제를 구현하기가 어려움
계층형 구조 커널
비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만들고 계층 간의 통신을 통해 운영체제를 구현하는 방식
마이크로 구조 커널
프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본적인 기능만 제공하고 나머지는 사용자 영역에 구현을 하는 구조
운영체제의 영역
운영체제는 크게 사용자 영역과 커널 영역으로 나눠져 있다.
사용자 영역은 애플리케이션을 이용하기 위하여 마련한 공간
커널 영역은 사용자가 이용하는 하드웨어를 효율적이고 안전하게 사용하기 위해 마련된 공간
가상머신
운영체제와 응용 프로그램 사이에서 작동하는 프로그램으로, 가상머신을 설치하면 응용 프로그램이 모두 동일한 환경에서 작동하는 것처럼 보인다. 따라서 개발자가 하나의 코드만 만들면 여러 운영체제에서 똑같이 실행할 수 있다. 자바는 유닉스와 윈도우에서 작동하는 다양한 가상머신을 만들어 배포하는데 이를 자바 가상머신(JVM)이라고 한다.
(쉽게 말해, 윈도우 같은 운영체제 위에서 가상머신이 동작하고 가상머신 위에서 응용 소프트웨어가 동작한다고 생각하면 됨)