[혼공컴운 09] 운영체제 시작하기

uuuu.jini·2023년 9월 3일
0

혼공컴운

목록 보기
1/5

시작하기 전에

데스크톱 컴퓨터, 노트북, 스마트폰에는 모두 운영체제가 설치되어 있다.
대표적인 운영체제: 윈도우, macOS, 리눅스, 안드로이드, iOS

컴퓨터 부품들은 운영체제라는 특별한 프로그램의 지휘하에 작동한다. 컴퓨터 부품들을 관리하고, 개발한 프로그램들이 올바르게 실행되도록 돕는다.

✅ 운영체제란?


모든 프로그램은 하드웨어를 필요로 한다.

  • 1+2를 계산하는 프로그램 => CPU
  • 이미지를 하드디스크에 저장하는 프로그램 => 하드디스크

프로그램 실행에 필요한 요소들을 시스템 자원, 혹은 줄여서 자원이라고 한다. (ex. CPU, 메모리, 보조기억장치, 입출력장치)

즉, 모든 프로그램은 실행되기 위해 반드시 자원이 필요하다.

실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램이 운영체제이다.

운영체제는 다른 프로그램을 위한 프로그램이므로 다른 프로그램과 마찬가지로 메모리에 적재되어야 한다. 운영체제는 특별한 프로그램이므로 항상 컴퓨터 부팅시 메모리내 커널 영역이라는 공간에 따로 적재되어 실행된다. 커널영역을 제외한 나머지 영역, 사용자가 이용하는 응용 프로그램이 적재되는 영역을 사용자 영역이라고 한다.

  • 응용프로그램: 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램 (워드 프로세서, 인터넷 브라우저, 메모장, 게임 등과 같은 프로그램)

    즉, 운영체제는 커널 영역에 적재되어 사용자 영역에 적재된 프로그램들에 자원을 할당하고 이들이 올바르게 실행되도록 돕는다.

운영체제가 하는 일의 예

  • 응용 프로그램을 사용자 영역 메모리에 적재
    • 워드 프로세서, 인터넷 브라우저, 메모장이 각각 해당 주소의 번지에 저장된다.
    • 운영체제는 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리 자원을 관리합니다.
  • 응용 프로그램의 동작에는 CPU가 필요하다.
    • 어떤 프로그램부터 CPU를 사용할지?
    • 얼마나 오랫동안 CPU를 사용할지?
    • 위와 같은 문제를 운영체제가 해결한다. ➡️ 어느 한 프로그램이 CPU를 독점하면 다른 프로그램이 올바르게 실행할 수 없기 때문에 운영체제는 최대한 공정하게 여러 프로그램에 CPU 자원을 할당한다.
  • 응용 프로그램과 하드웨어 사이에서 응용 프로그램에 필요한 자원을 할당하고, 응용 프로그램이 올바르게 실행되도록 관리하는 역할을 한다.

운영체제는 응용 프로그램에 자원을 효율적으로 배분하고, 실행할 프로그램들이 지켜야 할 규칙을 만들어 컴퓨터 시스템 전체를 관리

운영체제는 관리할 자원별로 기능이 나누어져 있다. ➡️ 어느 한 부분에서는 CPU를, 어느 한 부분에서는 메모리를, 어느 한 부분에서는 하드 디스크를 관리한다.

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


운영체제가 하드웨어를 조작하고 관리하는 기능들을 제공하기 때문에 개발자는 하드웨어를 조작하는 코드를 직접 작성할 필요 없이 운영체제의 도움을 받아 간편하게 개발이 가능하다.

운영체제를 깊이 이해하면 운영체제에게 제대로 명령할 수 있게 된다. ➡️하드웨어와 프로그램을 더 깊이 이해할 수 있다. (문제해결의 실마리를 찾을 수 있다.)

  • 대표적인 예: 오류 메시지
    • 오류 메시지의 근원은 운영체제이다. 코드를 하드웨어가 제대로 실행하지 못하면 운영체제는 오류메시지를 띄운다.

✅ 운영체제의 심장, 커널


운영체제는 현존하는 프로그램 중 규모가 가장 큰 프로그램 중 하나이다. 대표적인 운영체제인 리눅스를 구성하는 소스 코드는 천만줄이 넘는다. 운영체제가 다양하다. ➡️ 운영체제 서비스 또한 매우 다양하다.

운여에제가 응용 프로그램에 제공하는 서비스 종류는 다양하지만, 그중에서도 가장 핵심적인 서비스들이 있다.

  • 자원에 접근하고 조작하는 기능
  • 프로그램이 올바르고 안전하게 실행되게 하는 기능

운영체제의 핵심 서비스를 담당하는 부분을 커널이라고 한다.

커널은 마치 사람의 심장, 혹은 자동차의 엔진과도 같다. 어떤 커널을 사용하는지에 따라 실행하고 개발하는 프로그램이 하드웨어를 이용하는 양상이 달라지고, 결과적으로 컴퓨터 전체의 성능도 달라진다. (운영체제를 지칭할 때 특별히 언급하지 않는 한 커널을 지칭한다)

커널은 운영체제의 핵심 기능을 담당

운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스에는 대표적으로 사용자 인터페이스가 있다. 사용자 인터페이스는 UI:User Interface 는 윈도우의 바탕화면과 같이 사용자가 컴퓨터와 상호작용할 수 있는 통로이다.

  • 그래픽 유저 인터페이스 GUI: Graphical User Interface : 윈도우 바탕화면이나 스마트폰의 화면처럼 그래픽을 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스
    • 마우스 이용하여 다양한 프로그램 실행, 앱을 터치하여 실행 등 모두 그래픽 유저 인터페이스를 지원하기 때문에 가능
  • 커맨드 라인 인터페이스 CLI: Command Line Interface : 명령어를 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스
    • 아이콘이나 다채로운 화면 없이 정해진 명령어를 입력함으로써 컴퓨터와 상호작용을 수행한다.

사용자 인터페이스는 운영체제가 제공하는 서비스이지만, 이는 그저 컴퓨터와 상호작용하기 위한 통로일 뿐 커널에 속한 기능은 아니다

✅ 이중모드와 시스템 호출


운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다. => 그렇지 않는다면 응용 프로그램의 실수가 컴퓨터 전체에 악영향을 미칠 수 있다.

운영체제는 오직 자신만을 이용하여 자원에 접근할 수 있도록 제어한다. (문지기 역할)

  • 응용 프로그램의 요청을 받은 운영체제는 응용 프로그램 대신 자원에 접근하여 요청한 작업을 수행한다.
    • EX. 응용 프로그램이 실행 과정에서 하드 디스크에 접근하여 데이터를 저장하려면 운영체제에 도움을 요청해야 하고, 운영체제는 커널 영역 내의 하드 디스크에 데이터를 저장하는 코드를 실행하여 응용 프로그램의 작업을 대신 수행

이러한 운영체제의 문지기 역할은 이중 모드 로써 구현된다.

이중 모드란 CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식이다. CPU는 명령어를 사용자 모드로써 실행할 수 있고, 커널 모드로써 실행할 수 있다.

사용자 모드 (User Mode)

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

커널 모드 (Kernel Mode)

  • 운영체제 서비스를 제공받을 수 있는 실행 모드이다. 즉, 커널 영역의 코드를 실행할 수 있는 모드이다. CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있다. 운영체제는 커널 모드로 실행되기 때문에 자원에 접근할 수 있다.

이중 모드는 CPU가 명령어를 실행하는 모드를 커널 모드와 사용자 모드로 구분하는 방식이다.

  • CPU가 사용자 모드로 실행 중인지, 커널 모드로 실행 중인지는 플래그 레지스터 속 슈퍼바이저 플래그를 보면 알 수 있다.

사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환되어야 한다. 이때 운영체제 서비스를 제공받기 위한 요청을 시스템 호출 System call (시스템 콜) 이라고 한다. 사용자 모드로 실행되는 프로그램은 시스템 호출을 통해 커널 모드로 전환하여 운영체제 서비스를 제공받을 수 있다.

시스템 호출은 운영체제 서비스를 제공받기 위해 커널 모드로 전환하는 방법이다.

시스템 호출은 일종의 인터럽트이다. 정확히는 소프트웨어적인 인터럽트이다. 인터럽트는 입출력 장치에 의해 발생하기도 하지만 인터럽트를 발생시키는 특정 명령어에 의해 발생하기도 하는데, 이를 소프트웨어 인터럽트라고 한다.

시스템 호출 처리 순서

  • 시스템 호출 발생 명령어 실행
  • CPU가 지금까지의 작업을 백업
  • 커널 영역 내에 시스템 호출을 수행하는 코드(인터럽트 서비스 루틴)을 실행
  • 기존에 실행하던 응용 프로그램 복귀 후 실행

✅ 운영체제의 핵심 서비스


프로세스 관리, 자원 접근 및 할당, 파일 시스템 관리

🔎   프로세스 관리

실행 중인 프로그램을 프로세스라고 한다. 컴퓨터를 사용하는 동안 메모리 안에서는 새로운 프로세스들이 마구 생성되고, 사용되지 않는 프로세스는 메모리에서 삭제된다.

일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있기에 CPU는 이 프로세스들을 조금씩 번갈아 가며 실행한다. (한 프로세스를 실행하다가 다른 프로세스로 실행을 전환하고, 그 프로세스를 실행하다가 또 다른 프로세스로 실행을 전환하는 것을 반복한다.) ➡️ 이때, 각 프로세스는 상태도 사용하고자 하는 자원도 다르다.

운영체제는 다양한 프로세스를 관리하고 실행할 수 있어야 한다.

  • 여러 프로세스가 동시에 실행되는 환경에서는 프로세스 동기화
  • 프로세스가 꼼짝도 못하고 더 이상 실행되지 못하는 교착 상태 해결 필요

🔎   자원 접근 및 할당

모든 프로세스는 실행을 위해 자원을 필요로 한다. 그리고 운영체제는 프로세스들이 사용할 자원에 접근하고 조작함으로써 프로세스에 필요한 자원을 할당해 준다.

1. CPU

일반적으로 메모리에는 여러 프로세스가 적재되고, 하나의 CPU는 한 번에 하나의 프로세스만 실행 할 수 있다. 그래서 하나의 프로세스가 CPU를 이용하고 있다면 다른 프로세스는 기다려야 한다.

  • CPU 스케줄링
    운영체제가 프로세스들에 공정하게 CPU를 할당하기 위해 어떤 프로세스부터 CPU를 이용하게 할 것인지 얼마나 오래 CPU를 이용하게 할 것인지를 결정하는 것

2. 메모리

메모리에 적재된 프로세스들은 크기도, 적재되는 주소도 다르다. (같은 프로세스라 할지라도 실행시마다 적재 주소 달라짐) 운영체제는 새로운 프로세스 적재시마다 어느 주소에 적재해야 할지를 결정해야 한다.

3. 입출력장치

인터럽트 서비스 루틴은 운영체제가 제공하는 기능으로 커널 영역에 있다. 입출력장치가 발생시키는 하드웨어 인터럽트도 마찬가지이다. 운영체제는 인터럽트 서비스 루틴(인터럽트를 처리하는 프로그램)을 제공함으로써 입출력 작업을 수행한다.

🔎   파일 시스템 관리

파일 시스템 File System: 파일들을 한데 묶어 디렉터리(폴더)로 관리 하는 등의 시스템

✅ 정리


  • 커널: 운영체제의 핵심 서비스를 제공하는 부분
  • 사용자모드 -> 커널모드로의 전환: 사용자 프로세스가 커널의 서비스를 제공받기 위해 필요(커널 영역의 코드의 실행 위해)
  • 시스템호출: 커널 모드로써 운영체제의 서비스를 제공받을 수 있는 방법
  • 커널의 서비스: 프로세스 관리, 자원 접근 및 할당, 파일 시스템 관리

하이퍼바이저 모드: 가상머신 상에서 작동하는 응용 프로그램들은 하이퍼바이저 모드로써 가상머신에 설치된 운영체제로부터 운영체제 서비스를 받을 수 있다.

📌 (+) 시스템 호출의 종류

종류시스템 호출설명
프로세스 관리fork()새 자식 프로세스 생성
execve()프로세스 실행(메모리 공간을 새로운 프로그램의 내용으로 덮어씌움)
exit()프로세스 종료
waitpid()자식 프로세스가 종료할 때 까지 대기
파일 관리open()파일 열기
close()파일 닫기
read()파일 읽기
write()파일 쓰기
stat()파일 정보 획득
디렉터리 관리chdir()작업 디렉터리 변경
mkdir()디렉터리 생성
rmdir()비어 있는 디렉터리삭제
파일 시스템 관리mount()파일 시스템 마운트
umount()파일 시스템 마운트 해제

파일 시스템 마운트: 리눅스에서 여러가지 하드웨어 장치들을 사용하기 위해 리눅스라는 운영체제에 인식시켜야 하는데 이를 간으하게 해주는 것이 마운트 작업이다. 하드디스크 추가작업, 또는 DVD, CD-ROM 등과 같은 장치들은 시스템 부팅 후에 수동으로 마운트라는 작업을 해서 사용하는 경우가 종종 있다. 그리고 특정장치는 사용후에 반드시 마운트 해제를 해주어야 한다.

profile
멋쟁이 토마토

0개의 댓글