꾸준한 기록을

운영체제(Operating System)란 본문

프로그래밍 기초/운영체제

운영체제(Operating System)란

masiljangajji 2023. 12. 28. 20:58

운영체제란 (Operating System)

컴퓨터 시스템을 관리하고 제어하는 소프트웨어를 말합니다.

OS 구성요소

OS의 구성 요소는 다음과 같습니다.

  1. Interface
  2. System Call
  3. Kernel (I/O 드라이버, 파일시스템)

 

Interface

Interface의 경우 크게 2가지 로 나뉩니다

 

GUI (Graphical User Interface)
그래픽으로 구성된 화면을 말하며 , 키보드와 마우스를 조합하여 상호작용 합니다. ex(Window , Mac)

 

CUI (Chracter User Interface)
텍스트로 구성된 화면을 말하며 , 키보드를 중심으로 상호작용 합니다. ex(MS-DOS, chatGPT)

 

초기에는 CUI를 사용했지만 현재는 대부분의 OS가 GUI(Graphical User Interface) 방식을 채택하고 있습니다.


System Call

System Call이란 OS가 Kernel에 접근하기 위한 인터페이스이며

유저 프로그램이 커널 함수를 호출할 때 System Call을 거쳐서 호출하도록 설계되어있습니다.

프로세스 관리(생성,삭제), 파일관리 , 디바이스 관리 , 프로세스간 통신 등에 동작에서 커널함수를 호출합니다.

public class Main {

    public static void main(String[] args) throws InterruptedException {

        for (int i = 0; ; i++) {
            Thread.sleep(1000);
            System.out.println(i);
        }

    }

}

이 코드를 실행시키면 , 하나의 매 초마다 숫자를 출력하는 자바 프로세스가 생성 됩니다.

 

이 프로세스를 kill 명령어를 통해 삭제할 수 있습니다.



이 경우 System Call을 거쳐 Kernel Function 을 호출하게 됩니다.

 

조금 더 절차를 자세히 하면 다음과 같습니다.

  1. 유저 프로그램이 trap을 발생
  2. 올바른 요청인지 확인
  3. 유저모드가 시스템콜을 통해서 커널모드로 변환
  4. 커널함수 실행

System Call 동작 사진

유저모드 , 커널모드

유저모드는 운영체제 서비스를 제공받을 수 없는 실행 모드입니다. 즉 권한이 없는 상태로 커널에 접근이 불가능 합니다.
커널모드는 운영체제 서비스를 제공받을 수 있는 실행 모드입니다. 즉 권한이 있는 상태로 커널에 접근이 가능 합니다.

 

일반적인 응용프로그램은 유저모드에서 , 특정 자원에 대한 접근은 커널모드에서 이루어집니다.
(권한 차이를 부여하는 이유는 아래에서 다루겠습니다.)

 

Kernel

OS의 뇌를 담당하며 , OS가 하는 일은 Kernel이 관리합니다.

  1. CPU 스케쥴링과 프로세스 상태관리
  2. 메모리관리
  3. 디스크파일 관리
  4. I/O 디바이스 관리

 

 

키보드 드라이버가 깔려있지 않아 키보드를 사용할 수 없는 경우를 종종 볼 수 있습니다.

이러한 드라이버 또한 커널이 관리하며 추상화를 통해 하드웨어 장치를 제어하고 동작을 관리 합니다.

 

 

우리는 앞서 배운 개념으로 System Call을 사용해 유저 모드를 커널 모드로 변경 후 커널에 접근함을 알고 있습니다.

유저 모드, 커널 모드 구분 없이 커널에 접근할 수 있게 만들면 더 빠르고 효율적이겠지만
이는 안전성과 보안성에 큰 문제가 야기할 수 있습니다.

만약 프로그램이 CPU, RAM, HDD 등에 마음대로 접근하고 조작할 수 있다면 자원이 무질서하게 관리될 것이고
프로그램이 조금만 실수해도 컴퓨터 전체에 문제가 생길 수 있습니다.

이러한 문제점들을 유저 모드와 커널 모드를 분리함으로써, 또 System Call이라는 Interface를 둠으로써

사용자와 OS 간의 경계를 설정하고 OS의 핵심 부분을 안전하게 보호하고 있습니다.

 

Kernel은 다양한 운영체제에서 Linux 커널, Windows NT 커널, macOS의 XNU 커널 등이 존재합니다.

 

도움이 되셨으면 좋겠습니다.

'프로그래밍 기초 > 운영체제' 카테고리의 다른 글

프로세스(Process)와 통신기법  (1) 2023.12.29
가상메모리(Virtual Memory)란  (0) 2023.12.28