본문 바로가기
Computer Science/운영체제

[운영체제] ep1) 운영체제의 큰 그림

by 클레어몬트 2024. 3. 3.

운영체제(Operating System): 실행할 프로그램에 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램

(컴퓨터에서 가장 중요한 프로그램이다)

여기서 자원이란 시스템 자원으로써 프로그램 실행에 마땅히 필요한 요소들을 말한다 e.g. CPU, 메모리, 보조기억장치, I/O, 패킷, 파일 등

 

운영체제를 잘 알려면 커널의 개념을 확실하게 알고 가야 한다

ㅇ커널(kernel): 운영체제의 핵심 서비스를 담당하는 부분

메모리에는 커널 영역사용자 영역으로 나뉘어져 있으며, OS는 커널 영역에 적재되어 자원 할당과 프로그램 실행에 도움을 준다

대표적인 응용프로그램: 워드 프로세서, 인터넷 브라우저, 메모장, 게임 등

 

앞으로 운영체제를 지칭할 때는 특별한 언급이 없는 이상 커널을 지칭한다고 생각하면 된다

운영체제 커널의 핵심 기능들

 

 

 

 

대부분의 운영체제 서비스는 커널에 있지만 커널에 포함되지 않는 서비스도 존재한다, 바로 사용자 인터페이스(UI)이다

ㅇUI(User Interface): 사용자 인터페이스로 GUICLI로 나뉘어진다

- GUI(Graphical User Interface): 아이콘/메뉴를 클릭해서 명령

 

- CLI(Command Line Interface): 터미널(mac)/명령 프롬프트(Windows)로 컴퓨터에게 직접 명령어를 입력해 명령

 

(예전에는 마우스라는 I/O가 없었기 때문에 GUI가 없고 키보드만을 이용한 CLI방식으로 명령을 내렸었다, 그렇다고 해서 CLI가 지금 안 중요하다는 게 아니다 개발자라면 오히려 CLI와 더 친해져야 한다)

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

OS는 응용프로그램들이 마음대로 하드웨어 자원에 직접 접근하는 것을 막는다

 

이러한 문지기 역할을 OS는 듀얼모드로 수행한다

ㅇ듀얼모드(Dual Mode): CPU가 명령어를 실행하는 모드를 유저모드커널모드로 구분 짓는 방식

- 유저모드(User Mode): OS서비스를 제공받을 수 없는 실행모드 == 커널영역의 코드를 실행할 수 없는 모드

자원 접근 X

 

- 커널모드(Kernel Mode) = 시스템 모드 = 컨트롤 모드: OS서비스를 제공받을 수 있는 실행모드 == 커널영역의 코드를 실행할 수 있는 모드

자원 접근 O, 모든 명령어 실행 가능

 

 

e.g. 응용 프로그램은 유저모드로 실행하고, OS는 커널모드로 실행한다

 

추가) CPU가 유저모드로 실행 중인지, 커널모드로 실행 중인지는 플래그 레지스터 속 슈퍼바이저 플래그(or PSW)를 보면 알 수 있다 (1: 커널모드, 0: 유저모드) 

[컴퓨터 구조] ep4 참고

https://claremont.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-ep4-CPU%EC%99%80-%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8

 

[컴퓨터 구조] ep4) CPU와 인터럽트

컴퓨터의 두뇌 CPU == 프로세서 에 대해서 자세히 알아보자 CPU(Central Processing Unit) = ALU + 제어장치 + 레지스터 ㅇALU(Arithmetic Logic Unit) 산술연산장치 ALU는 플래그를 내보낸다 아래의 표를 보자 이 플

claremont.tistory.com

 

ㅇ시스템 호출(System Call): OS 서비스를 제공받기 위해 커널모드로 전환하는 것

시스템 호출은 일종의 소프트웨어 인터럽트이다

 

<시스템 호출의 과정>

 

CPU가 시스템 콜을 처리하는 순서는 [컴퓨터 구조] 때 배운 하드웨어 인터럽트 처리 순서와 비슷하다 (ISR을 쓰는 등)

[컴퓨터 구조] ep4 참고

https://claremont.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-ep4-CPU%EC%99%80-%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8

 

[컴퓨터 구조] ep4) CPU와 인터럽트

컴퓨터의 두뇌 CPU == 프로세서 에 대해서 자세히 알아보자 CPU(Central Processing Unit) = ALU + 제어장치 + 레지스터 ㅇALU(Arithmetic Logic Unit) 산술연산장치 ALU는 플래그를 내보낸다 아래의 표를 보자 이 플

claremont.tistory.com

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

ㅁ운영체제(커널)의 핵심 서비스 3가지ㅁ

 

1. 프로세스 관리

ㅇ프로세스(process): 실행 중인 프로그램

UNIX에서는 task라 불리기도 한다

(윈도우 컴퓨터 [작업 관리자]의 [프로세스] 탭을 보면 굉장히 많은 프로세스가 실행 중인 것을 알 수가 있다)

 

일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있어서 CPU는 이 프로세스들을 조금씩 번갈아 가며 실행한다, 다시 말해 CPU는 한 프로세스를 실행하다가 다른 프로세스로 실행을 전환하고, 그 프로세스를 실행하다가 또 다른 프로세스로 실행을 전환하는 것을 반복한다

이러한 다양한 프로세스를 CPU가 일목요연하게 관리하고 실행하는 방법이다

추가로 여러 프로세스가 동시에 실행되는 환경일 때는 '프로세스 동기화'가 필요하고 프로세스가 꼼짝도 못 하고 더 이상 실행되지 못하는 상황인 '교착상태'를 해결해야 한다

 

2. 자원 접근 및 할당

- CPU: CPU 스케줄링(어떤 프로세스를 먼저, 얼마나 오래 실행할지 결정)

- 메모리: 페이징, 스와핑 등

- I/O: ISR(커널 영역에 있는 기능이다)

 

3. 파일 시스템 관리 - 파일 열기/생성/삭제, 폴더(디렉터리) 관리

*파일(file): 관련된 정보를 묶는 단위

(Windows의 폴더 == UNIX의 디렉토리)

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

ㅁ운영체제의 진화 과정

 

 

1. Uniprogramming

System Utilization Example

 

 

2. Multiprogramming = Multitasking: 메모리 안의 여러 프로그램들을 효율적으로 번갈아가며 실행(다른 프로그램으로 스위치가 가능하다)

CPU 사용 극대화가 메인 목적으로 효율을 상승시킨다

 

 

3. Time Sharing: 프로세서 시간을 분할해 공유하며 사용하는 기술 (기본적으로 멀티프로그래밍이 베이스다)

모든 프로그램을 동시에 사용하고 있다는 착각이 들게 만든다

유저의 response time 최소화가 메인 목적이다

 

 

ㅁ현대의 OS 기술들

ㅇ마이크로 커널 아키텍쳐(Microkernel architecture): 커널의 함수들을 최소화해 커널을 축소시키고 나머지 OS의 기능들을 분리해 유저모드에서 작동하는 OS 기능 process로 만든다

e.g. Windows OS

장점: 시스템 확장성 good, 수정에 용이

단점: slow

 

ㅇ멀티스레딩(Multithreading): 프로그램의 함수들을 동시에 실행 가능하게 하는 것

- Windows가 시스템 확장성은 좋지만 속도가 느려서 멀티스레딩 방식을 채택한다

 

Q. UNIX는 확장성이 좋지 않다. 그럼에도 불구하고 마이크로 커널 아키텍트를 사용하지 않는 이유는?

A. 커널이 다 모여있기 때문에 속도가 훨씬 빠르다

 

ㅇSMP(Symmetric MultiProcessing): 여러 개의 프로세서가 하나의 공유된 메모리를 사용

 

SMP -> Multicore -> Many-core

 

분산 운영체제(Distributed operating systems): 별도의 PC들을 하나의 PC처럼 사용

e.g. 클러스터 (42서울에서는 컴퓨터가 모여있는 공간을 클러스터라 칭한다)

 

ㅇ객체 지향 설계(OOD, Object-Oriented Design): 소프트웨어 시스템을 설계하는 방법 중 하나로, 시스템을 객체(Object)의 집합으로 모델링하여 문제를 해결하는 접근 방식

- 객체 지향 프로그래밍(OOP, Object-Oriented Programming)의 원칙과 개념을 사용하여 소프트웨어의 구조를 정의

 

 

[각 운영체제별 아키텍쳐]

ㅁWindows - 마이크로 커널 아키텍쳐

확장성 good, 수정 용이 / slow

 

ㅁUNIX - 커널이 아주 거대하다

fast / 확장성 bad, 수정 불편

 

ㅁ현대 Unix - 마이크로 커널 아키텍쳐 채택

Modern UNIX Kernel

 

ㅁLinux - 커널이 역시 아주 거대하다

(Linux는 알다싶이 UNIX 기반이다)

 

ㅁAndroid - 리눅스 커널 기반

Android System Architecture

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

추가지식1) 가상머신(Virtual Machine)

가상머신은 소프트웨어적으로 만들어낸 가상 컴퓨터이다

가상머신을 설치하면 새로운 운영체제와 응용 프로그램을 설치하고 실행할 수 있다

e.g. java의 JVM(Java Virtual Machine)

 

가상 머신은 응용 프로그램이기 때문에 사용자 모드로 작동한다 마찬가지로 가상 머신상에 설치된 OS 역시 사용자 모드로 작동한다 그리고 그 응용 프로그램 역시 사용자 모드인데 커널 모드로 전환하기 어렵기 때문에 이때는 따로 하이퍼바이저 모드를 둔다

 

다시 정리하자면 가상화를 지원하는 CPU는 커널모드유저모드 이외에 가상머신을 위한 모드인 하이퍼바이저 모드를 따로 둔다

 

 apple의 부트캠프와는 조금 다르다! 가상머신은 하나의 운영체제 위에서 다른 운영체제를 애뮬레이션 하지만 부트캠프는 물리적 하드웨어 위에 다른 운영체제를 직접 설치하고 컴퓨터를 재시작하여 다른 운영체제를 실행하는 듀얼 부팅 시스템으로 분류된다 (가상머신 = 메소드 연기, 부트캠프 = 다중인격) 

 

 

 

추가지식2) 시스템 호출의 종류

POSIX 운영체제(unix, Linux)

 

C언어의 printf와 scanf함수도 내부적으로 시스템 호출을 통해 실행된다

 

 

 

 

 

 

 

 

 

여담) 리눅스의 소스코드는 천만 줄이 족히 넘는다고 한다

 

참고 및 출처: Operating Systems: Internals and Design Principles(William Stalling), Operating System Concepts(Silberschatz, Abraham), 혼공컴운(강민철)