운영체제는 매우 많은 종류와 다양한 기능이 있는 특별한 프로그램입니다.
운영체제에는 Windows, MacOS, Linux, Android, iOS 등 다양한 종류가 있지만, 종류에 관계없이 운영체제가 제공하는 핵심 기능은 비슷합니다.
이번 포스트에서는 운영체제의 큰 틀에 대해서만 간략히 살펴보도록 하겠습니다.
1. 운영체제 개요
- 운영체제의 핵심 기능을 담당하는 부분: 커널(kernel)

- 운영체제의 두 가지 핵심 기능
- 프로세스 및 스레드 관리
- 자원 할당 및 관리
2. 운영체제의 핵심 기능: 프로세스 및 스레드 관리
- 프로세스 및 스레드
- 프로세스(Process): ‘실행 중인 프로그램’을 단순 통칭
- 스레드(Thread): 프로세스를 이루는 실행의 단위
- 운영체제의 프로세스/스레드 관리
- 동시다발적인 프로세스 및 스레드를 올바르게 처리하도록 실행 순서 제어
- 프로세스 및 스레드가 요구하는 자원을 적절히 분배

- 순서
- 메모리에는 여러 프로세스가 적재됨
- 운영체제는 각 프로세스에 필요한 자원을 할당
- 스레드는 프로세스가 할당받은 자원을 이용해 프로세스의 작업 수행
- 스레드가 둘 이상이면 동일한 작업을 동시에 실행할 수 있음
- 프로세스의 계층 구조
- 많은 운영체제에서 프로세스들은 계층적으로 관리됨
- 프로세스는 시스템 콜(아래서 설명)을 통해 또 다른 프로세스 형성
- 새 프로세스를 생성한 프로세스: 부모 프로세스(parent process)
- 부모 프로세스에 의해 생성된 프로세스: 자식 프로세스(child process)

3. 운영체제의 핵심 기능: 자원 할당 및 관리
- (시스템)자원: 프로그램 실행에 마땅히 필요한 요소
- 소프트웨어도 자원: 실행에 필요한 '데이터'
- 하드웨어도 자원: 실행에 필요한 '부품'
- 운영체제의 자원 할당 및 관리
- 사용자가 실행하는 응용 프로그램을 대신하여 컴퓨터 부품(CPU, 메모리, 보조기억장치 등)에 접근
- 각 부품들이 효율적으로 사용될 수 있도록 관리
- 응용 프로그램을 문제없이 실행될 수 있도록 컴퓨터 부품을 효율적으로 할당
CPU 관리: CPU 스케줄링
- 실행 중인 모든 프로그램에 대한 CPU의 할당 순서 및 사용 시간을 결정해줌.
- CPU는 한정된 자원 → 이를 할당받아 사용하기 위해서는 다른 프로그램의 CPU 사용이 끝날 때까지 기다려야 함 → CPU 스케줄링을 통해 결정
메모리 관리: 가상 메모리
- 운영체제는 동시에 낭비되는 메모리 용량이 없도록 효율적으로 관리함
- 새롭게 실행하는 프로그램은 메모리에 적재
- 종료된 프로그램은 메모리에서 삭제
- 오늘날의 운영체제는 이를 위해 대부분 가상 메모리 기술을 활용
- 실제 물리적인 메모리 크기보다 더 큰 메모리를 이용할 수 있도록 해줌
- 실제 물리적인 메모리 크기보다 더 큰 메모리를 이용할 수 있도록 해줌
파일/디렉터리 관리: 파일 시스템
- 메모리보다 훨씬 큰 용량을 지닌 보조기억장치 → 더욱 체계적으로 정리 →파일 시스템 활용
- 파일 시스템: 보조기억장치 내 정보를 파일/폴더 단위로 접근 및 관리할 수 있도록 만들어줌
4. 시스템 콜과 이중 모드
- 운영체제도 당연히 프로그램 실행을 위해서는 메모리에 적재됨
- 하지만 운영체제는 반드시 커널 영역(kernel space)이라는 공간에 따로 적재되어 실행
- 사용자 응용프로그램이 적재되는 공간은 사용자 영역(user space)

- 사용자 응용프로그램이 적재되는 공간은 사용자 영역(user space)
- 사용자 모드와 커널 모드
- 사용자 모드: 사용자 영역에 적재된 코드를 실행할 때의 실행 모드
- 운영체제 서비스를 제공받을 수 없는 실행 모드
- 컴퓨터 자원에 접근하는 명렁어를 만나도 실행하지 않음
- 커널 모드: 커널 영역에 적재된 코드를 실행할 때의 실행 모드
- 운영체제 서비스를 제공받을 수 있는 실행 모드
- 컴퓨터 자원에 접근하는 명령어를 비롯한 모든 명령어 실행 가능
- 이중모드(dual mode): 위와 같은 2개의 모드로 구분하여 실행하는 것
- 사용자 모드: 사용자 영역에 적재된 코드를 실행할 때의 실행 모드
- 운영체제의 기능을 제공받기 위해서는 → 커널영역에 적재된 운영체제 코드를 실행해야 함
- 응용프로그램은 컴퓨터 자원을 할당받기 위해 운영체제의 코드를 실행 → 시스템 콜 호출
- 운영체제는 시스템 콜을 받아 원하는 기능을 제공해줌
- 응용프로그램은 자기 스스로 컴퓨터 자원에 직접 접근할 수 없음
- 시스템 콜: 운영체제의 서비스를 제공받기 위한 수단 / 호출 가능한 함수의 형태
- 운영체제 별로 제공하는 시스템 콜의 종류 및 개수는 다양함

- 운영체제 별로 제공하는 시스템 콜의 종류 및 개수는 다양함
- 시스템 콜의 진행과정
- 시스템 콜이 호출되면, 아래와 같은 순서로 작업이 수행됨
- 소프트웨어 인터럽트 - 시스템 콜이 소프트웨어 인터럽트의 일종
- 사용자 영역을 실행하던 중 시스템 콜이 호출되면 소프트웨어 인터럽트 발동 2. CPU의 커널모드 전환
- CPU는 현재 수행중인 작업을 백업하고 3. 운영체제 코드 실행
- 커널 영역 내의 ‘인터럽트를 처리하기 위한 코드’ 실행 4. 사용자 모드 재전환
- 사용자 영역의 코드 실행 재개
- 시스템 콜이 호출되면, 아래와 같은 순서로 작업이 수행됨
- 응용프로그램은 실행 과정에서 시스템 콜을 매우 빈번하게 호출
- 유닉스 계열의 OS에서 사용하는 시스템 콜의 종류
- 프로세스 관리
- fork(): 새로운 자식 프로세스 생성
- execve(): 프로세스 실행(메모리 공간을 새 프로그램 내용으로 덮어씌움)
- exit(): 프로세스 종료
- waitpid(): 자식 프로세스가 종료될 때까지 대기
- 파일 관리
- open(): 파일 열기
- close(): 파일 닫기
- read(): 파일 읽기
- write(): 파일 쓰기
- stat(): 파일 정보 획득
- 디렉토리 관리
- chdir(): 작업 디렉토리 변경
- mkdir(): 디렉터리 생성
- rmdir(): 비어 있는 디렉터리 삭제
- 파일 시스템 관리
- mount(): 파일 시스템 마운트
- umount(): 파일 시스템 마운트 해제
- 프로세스 관리
다음 포스트에서는 프로세스와 스레드부터 자세히 알아보겠습니다.
chat_bubble 댓글남기기
댓글남기기