09-1 운영체제를 알아야 하는 이유
운영체제란
자원(시스템 자원): 프로그램 실행에 마땅히 필요한 요소. CPU, 메모리 등
운영체제(operating system): 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램
- 운영체제는 메모리 내 적당한 공간에 프로그램들을 적제하고, 더 이상 실행되지 않는 프로그램을 삭제
- 누가 어떤 순서로 얼마나 CPU를 사용하게 할지도 운영체제가 처리
- 입출력장치나 자원등을 관리
- 응용 프로그램과 하드웨어 사이에서 필요한 자원을 할당하고, 올바르게 실행되도록 관리하는 역할
커널 영역(kernel space): 운영체제가 메모리 내에서 적재되는 특별한 공간
사용자 영역(user space): 커널 영역을 제외한 나머지, 사용자가 이용하는 응용 프로그램이 적재되는 영역
응용 프로그램(application software): 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램
운영체제를 알아야 하는 이유
- 운영체제가 없으면 하드웨어를 조작하는 코드도 작성되어야 한다.
- 운영체제를 알면 하드웨어 상태, 코드가 어떻게 실행되었는지, 하드웨어 상에 어떤 문제가 있었는지를 상세히 알 수 있음
- 이를 바탕으로 문제 해결의 실마리를 찾을 수 있다.
09-2 운영체제의 큰 그림
운영체제의 심장, 커널
운영체제도 하나의 프로그램
커널(kernel)
- 운영체제의 핵심 서비스를 담당하는 부분
- 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능 등
- 커널에 포함되지 않는 서비스
- 사용자 인터페이스(UI)
- 사용자가 컴퓨터와 상호작용할 수 있는 통로
- GUI(Graphical User Interface), CLI(Command Line Interface) 등
- 사용자 인터페이스(UI)
이중 모드와 시스템 호출
하드웨어 자원 접근이 관리되지 않으면 컴퓨터 전체에 악영향을 끼침
운영체제는 응용 프로그램들이 자신을 통해서만 자원에 접근하도록하여 자원을 보호
응용 프로그램들은 자원에 접근하기 위해 운영체제에 도움을 요청(운영체제 코드를 실행)
이중 모드(dual mode)
- CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식
- 사용자 모드(user mode)
- 운영체제 서비스(커널 영역의 코드)를 실행할 수 없는 모드
- 일반적인 응용 프로그램이 실행되는 모드
- 하드웨어 자원에 접근하는 명령어를 실행할 수 없음
- 커널 모드(kernel mode)
- 운영체제 서비스를 제공받을 수 있는 실행 모드
- 운영체제가 실행되는 모드
- CPU의 현재 모드: 플래그 레지스터 속 슈퍼바이저 플래그에 저장
시스템 콜(system call)
- 응용 프로그램이 운영체제 서비스를 제공받기 위해 CPU를 커널 모드로 전환하도록 보내는 요청
- 소프트웨어 인터럽트
프로그램 실행 과정
- 하드 디스크에 데이터를 저장하려고 함
- 시스템 콜을 발생시켜 CPU를 커널 모드로 전환
- 운영체제 내에 있는 ‘하드 디스크에 데이터를 저장하는 코드’를 실행
- CPU가 다시 사용자 모드로 전환
운영체제의 핵심 서비스
프로세스 관리
프로세스(process)
- 실행중인 프로그램
- CPU는 이 프로세스들을 조금씩 번갈아 가며 실행
- 프로세스마다 상태, 사용하려는 자원은 다양하므로 이에 대한 관리가 필요
- 여러 프로세스가 동시애 실행되는 환경에선 프로세스 동기화가 필수
자원 접근 및 할당
CPU
- CPU 스케줄링
- 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있음
- 운영체제는 프로세스들에 공정하게 CPU를 할당하기 위해 누가 어떤 순서로 얼마나 오래 CPU를 이용하게 할지 결정해야 함
메모리
- 새로운 프로세스가 메모리에 적재될 주소
- 메모리의 할당, 메모리가 부족할 때의 극복
입출력장치
- 인터럽트 서비스 루틴
- 인터럽트를 처리하는 프로그램
- 인터럽트 서비스 루틴은 운영체제가 제공하는 기능으로 커널 영역에 있음
파일 시스템 관리
- 파일, 디렉토리(폴더)의 관리
가상 머신
- 소프트웨어적으로 만들어낸 가상 컴퓨터
- 가상 머신 또한 응용 프로그램이므로 사용자 모드로 작동
- 가상 머신 내의 프로그램이 운영체제 서비스를 제공받아야 한다면?
- CPU는 커널 모드와 사용자 모드 이외에 하이퍼바이저 모드가 따로 있음
하이퍼바이저 모드
가상 머신 내 운영체제(게스트 OS)는 자신의 입장을 몰라서 커널 서비스를 이용하려 함
CPU가 게스트 OS의 명령을 실행하는 대신 하이퍼바이저 모드로 제어권을 넘김
하이퍼바이저는 게스트 OS가 하려고 한 것을 파악하고 하드웨어를 조작하거나 가짜 결과를 돌려줌
시스템 콜의 종류
프로세스 관리
fork(): 새 자식 프로세스 생성execve(): 프로세스 실행exit(): 프로세스 종료waitpid(): 자식 프로세스가 종료할 때까지 대기
파일 관리
open(): 파일 열기close(): 파일 닫기read(): 파일 읽기write(): 파일 쓰기stat(): 파일 정보 획득
디렉토리 관리
chdir(): 작업 디렉토리 변경mkdir(): 디렉토리 생성rmdir(): 비어 있는 디렉토리 삭제
파일 시스템 관리
mount(): 파일 시스템 마운트umount(): 파일 시스템 마운트 해제