Search
🧸

운영체제 시작하기

생성일
2023/08/06 01:42
태그
혼공컴구
운영체제
날짜
3 more properties

학습 목표

운영체제가 무엇인지 이해한다
개발자가 운영체제를 알야하는 이유를 알아본다
커널이 무엇인지 학습한다
시스템 호출과 이중 모드에 대해 이해한다
운영체제가 제공하는 핵심 서비스의 종류를 학습한다

운영체제를 알아야 하는 이유

운영체제란

모든 프로그램은 하드웨어를 필요로 함
1+2 계산하는 프로그램 → CPU, 하드 디스크 등등 필요
프로그램 실행에 마땅히 필요한 요소 → 시스템 자원, 줄여서 자원
지금까지 배운 CPU, 메모리, 보조기억장치, 입출력장치 → 모두 “자원”
운영체제 (Operating System)
실행할 프로그램에 필요한 자원을 할당하고,
프로그램이 올바르게 실행되도록 돕는 특별한 프로그램
프로그램은 항상 메모리에 적재되어야 한다
운영체제도 프로그램이니 메모리에 적재되어야 한다
운영체제는 매우 특별한 프로그램이기 때문에 컴퓨터가 부팅될 때 메모리 내 특별한 공간에 적재된다
메모리 내 특별한 공간: 커널 영역 (Kernel space)
커널 영역을 제외한 영역 = 사용자 영역(User space)
응용프로그램이 사용자 영역에 메모리를 할당 받았다
누가 겹치지 않게 잘 할당 해줄까? → 운영체제
또한 각각의 프로그램이 실행되려면 반드시 CPU가 필요하다
어떤 프로그램부터 CPU를 사용하게 할까?
얼마나 오래 CPU를 사용하게 할까?
한 프로그램의 CPU 독점을 막고 공정하게 CPU 자원을 할당
→ 모두 운영체제가 해결
두 응용 프로그램이 동시에 프린터를 사용하려는 상황
운영체제가 동시 사용을 막고 대기시킴 → 프린터라는 자원을 관리

운영체제를 알아야 하는 이유

→ 문제 해결의 실마리를 얻기 위해서
개발자가 접하는 대부분의 오류 메세지의 근원은 운영체제이다
소스코드를 하드웨어가 제대로 실행하지 못하면 운영체제가 메세지를 띄워준다

운영체제의 큰 그림

커널, 이중모드, 시스템 호출, 운영체제 서비스
운영체제
사용자를 위한 프로그램 X
사용자가 실행하는 프로그램을 위한 프로그램 O

커널

운영체제 ← 현존하는 프로그램 중 가장 큰 프로그램 중 하나
리눅스: 천만 줄 이상
운영체제가 응용프로그램에 제공하는 서비스 중 핵심
자원에 접근하고 조작하는 기능
프로그램이 올바르고 안전하게 실행되게 하는 기능
등등의 핵심 서비스를 담당하는 부분 → 커널 (Kernel)
운영체제가 있는 모든 기기에 커널이 있다
특별히 언급 없는 한, 전공 책에서 다루는 운영제체 = 커널 이라고 봐도 무관
운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스
대표적인 게 사용자 인터페이스(UI, User Interface)
UI = GUI, CLI
마우스를 쓸 수 있는 건 윈도우 운영체제가 GUI를 지원하기 때문
안드로이드에서 터치할 수 있는 건 안드로이드 운영체제가 GUI를 지원하기 때문
이렇듯 UI는 운영체제가 제공하는 서비스지만, 컴퓨터와 상호작용하기 위한 통로일 뿐, 커널에 속한 기능은 아니다

이중 모드와 시스템 호출

운영체제는 사용자가 실행하는 응용프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원 보호
응용프로그램이 CPU, 메모리, 하드 등에 마음대로 접근하여 조작한다면 자원이 무질서하게 관리될 것
그래서 운영체제는 자신을 통해서만 접근하도록
운영체제에 도움을 요청한다
= 운영체제 코드를 실행하려고 한다
ex) 응용 프로그램 → 하드 디스크에 데이터 저장
응용 프로그램 → 운영체제
운영체제 → 커널 내의 하드 디스크에 데이터를 저장하는 코드 실행
이러한 작업은 이중 모드로써 구현
이중 모드, Dual Mode
CPU가 명령어를 실행하는 모드를 크게 사용자 모드 + 커널 모드로 구분하는 방식
CPU는 명령어를 사용자 모드로써 실행할 수 있고, 커널 모드로써 실행할 수 있다

사용자 모드

User Mode
운영체제 서비스를 제공받을 수 없는 실행 모드
즉, 커널 영역의 코드를 실행할 수 없는 모드
일반적인 응용프로그램은 기본적으로 사용자 모드로 실행
이 때 CPU는 입출력 명령어와 같이 하드웨어 자원에 접근하는 명령어를 실행할 수 없다
사용자 모드 → 자원에 접근 불가

커널 모드

Kernel Mode
운영체제 서비스를 제공받을 수 있는 실행 모드
커널 영역의 코드를 실행할 수 있는 모드
CPU가 커널 모드로 실행될 때 자원 접근을 비롯한 모든 명령어 실행 가능
운영체제는 커널 모드로 실행
사용자 모드로 실행중인 프로그램이 자원에 접근하려고 한다면?
운영체제 서비스를 받아야함
운영체제에 요청을 보내 커널 모드로 전환돼야 한다
여기서 운영체제 서비스를 제공받기 위한 요청 = 시스템 콜
시스템 호출, System Call
사용자 모드로 실행되는 프로그램은 시스템 호출을 통해 커널 모드로 전환하여 운영체제 서비스를 제공받을 수 있다
시스템 호출은 일종의 인터럽트다 (소프트웨어적 인터럽트)
소프트웨어적 인터럽트: 특정 명령어에 의해 발생하는 인터럽트 ( 입출력 장치에 의해 발생)
그래서 시스템 호출 처리 순서는 인터럽트 처리 순서와 동일
시스템 콜 → CPU가 하던 거 백업 → 커널 영역 내에 시스템 콜 실행 코드(인터럽트 서비스 루틴) 실행 → 기존 응용 프로그램으로 복귀
ex) 응용프로그램 → 디스크에 데이터 저장

운영체제의 핵심 서비스

프로세스 관리

프로세스 = 실행 중인 프로그램
일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행 가능
→ 조금씩 번갈아 가면서 실행
입출력장치를 주로 사용하는 프로세스, CPU만 사용하는 프로세스, 당장 실행 가능한 프로세스, 불가능한 프로세스 … 다양하다 → 운영체제가 일목요연하게 잘 관리, 실행할 수 있어야 한다
추가로, 여러 프로세스가 실행되는 환경 → 프로세스 동기화가 필수적
프로세스가 아무것도 못 하는 교착상태를 해결해야 한다

자원 접근 및 할당

모든 프로세스는 실행을 위해 자원을 필요로 한다
운영체제는 프로세스들이 사용할 자원에 접근하고 조작 → 프로세스에 필요한 자원 할당해줌
운영체제가 어떻게 4가지 핵심 부품을 관리해 줄까
CPU, 메모리, (보조기억장치와) 입출력장치

CPU

일반적으로 메모리에 여러 프로세스가 적재
하나이 CPU는 한 번에 하나의 프로세스 실행
그래서 실행중이지 않은 프로세스는 기다려야
→ 그래서 CPU 스케줄링이 필요하다

메모리

메모리에 적재된 프로세스들은 크기, 주소가 가지 각색이다
같은 프로세스라도 실행될 때마다 적재되는 주소가 달라질 수 있다
운영체제는 새로운 프로세스가 적재될 때 어느 주소에 적재할 지 결정해야한다
때로는 메모리가 꽉 차 있어서 적재할 공간이 없을 수도 있따
메모리에 공간이 남아 있어도 적재 불가능한 경우도 있다
→운영체제가 프로세스에게 어떻게 메모리를 할당하는 지, 부족한 경우는 어떻게 하는지

입출력장치

인터럽트 서비스 루틴
운영체제가 제공하는 기능
커널 영역에 존재
입출력장치가 발생시키는 하드웨어 인터럽트도 마찬가지
입출력장치가 CPU에 하드웨어 인터럽트 요청 신호 보낸다 → CPU 백업 → 커널 영역의 인터럽트 서비스 루틴 실행 → ….
→ 운영체제는 인터럽트 서비스 루틴(인터럽트를 처리하는 프로그램)을 제공한다

파일 시스템 관리

파일 시스템 → 운영체제가 지원하는 핵심 서비스
→ 운영체제가 보조기억장치 속 데이터를 어떻게 파일과 디렉터리로 관리하는 지