[Operating System] 운영체제와 시스템 콜

권영태·2025년 4월 15일

Operating System

목록 보기
1/20

운영체제

사용자와 하드웨어 사이에 중간 매개체로 응용 프로그램 실행을 제어하고, 자원 할당/관리하며 입출력 제어와 데이터 관리 같은 서비스를 제공하는 소프트웨어다.

작은 범위의 운영체제는 커널이라고 부를 수 있는데, 커널은 운영체제의 핵심으로 메모리에 상주하는 부분을 말한다. 넓은 범위로는 커널 외에 각종 주변 시스템과 유틸리티를 포함해 말할 수 있다.

운영체제의 목적

운영체제의 목적은 컴퓨터 시스템의 자원을 효율적으로 관리하기 위함이다. 이때 자원은 하드웨어 자원뿐 아니라 소프트웨어 자원까지 포함된다. 또한, CLI·GUI 등 인터페이스 제공을 통해 사용자가 컴퓨터 시스템을 편리하게 사용하기 위한 목적도 있다.

운영체제의 분류

운영체제는 작업 여부, 사용자 수 그리고 처리 방식에 따라 분류할 수 있다.

  • 작업 여부
    • 단일 작업(Single tasking): 한 번에 하나의 작업만 실행
    • 다중 작업(Multi tasking): 한 번에 여러 개 작업 가능
  • 사용자 수
    • 단일 사용자: 1명의 사용자만 하나의 컴퓨터 시스템에 접근
    • 다중 사용자: N명의 사용자가 하나의 컴퓨터 시스템에 접근
  • 처리 방식
    • 일괄 처리(Batch Processing): 일정량만큼 작업 요청을 모아서 한번에 처리하는 방식
    • 시분할(Time Sharing): 일정시간 단위마다 돌아가면서 여러 작업을 처리하는 방식, Interacive(ex. 키보드를 누르자마자 바로 입력이 되는)한 방식이라고도 한다.
    • 실시간 운영체제(RealTime OS): 정해진 시간안에 어떠한 일이 반드시 종료됨이 보장되는 OS, 특수 목적이 필요한 시스템에 사용된다.
      • 실시간 시스템 개념 확장: Hard RealTime System(원자로 제어 등), Soft RealTime System(영화 상영 등)

용어 정리

  • Multi Tasking: 하나의 CPU가 동시에 여러 작업을 수행
  • Multi Programming: 여러 프로그램이 하나의 메모리에 올라가 있음, 하나의 메모리에 여러 프로그램이 올라가면 동시에 여러 작업을 수행할 수 있는데 이는 Multi Tasking과 같다. 즉, Multi Tasking과 Multi Programming은 같은 의미지만 Multi Programming은 메모리 부분을 조금 더 강조한 용어.
  • Time Sharing: 일정시간 단위마다 돌아가면서 여러 작업을 처리하기에 Multi Tasking을 구현한 대표적인 방식.
  • Multi Process: 여러 CPU 코어로 나누어져 동시에 여러 작업 수행

운영체제의 구조

운영체제는 여러 기능을 수행한다.

  • CPU 스케줄링: 어떤 프로세스가 CPU(프로세서)를 선점할건지 결정하는 알고리즘.
  • 메모리 관리: 여러 프로세스를 실행시키 위해 한정된 크기를 갖는 메모리를 관리.
    • 메인 메모리 관리
    • 보조기억장치 관리
  • 파일 관리: 디스크에서 파일을 연속적 또는 조각적 등 어떤 방식으로 적재시킬지 결정.
  • 입출력 관리: 각기 다른 입출력 장치와 컴퓨터 시스템 간 어떻게 정보를 주고 받을지 결정.

운영체제 서비스

운영체제는 여러 서비스를 제공한다.

  • 부팅 서비스: 운영체제를 메인 메모리에 적재하는 과정을 부팅(부트스트래핑)이라고 하며, 이 과정은 ROM에 고정된 부스트트랩 로더가 부트로더를 로더해 실행된다. 부팅 서비스를 통해 시스템 장치 초기화 및 명령 해석기 적재와 준비를 위해 초기화 등 운영체제의 예기치 못한 오류를 줄이기 위해 진행한다.

  • 사용자 서비스: 프로그래머가 보다 편리하게 프로그래밍할 수 있도록 제공하는 서비스, 사용자 인터페이스(CLI, GUI, Menu 등)를 제공하며 프로그램 실행, 입출력 동작 수행, 파일 시스템 조작, 프로세스 간 통신 등 여러 편리한 기능을 제공.

  • 시스템 서비스: 시스템 자체의 효율적인 동작을 보장하는 기능으로 자원 할당, 계정, 보호와 보안이 있다.

    • 보호: 시스템 콜 처리전 전달 받은 모든 매개변수 검증 및 시스템 자원에 대한 사용자 접근 제어 보장, 프로세스 간 접근 제한 및 시스템 자원에 대한 접근 제어를 보장.
    • 보안: 사용자 인증, 권한 부여 등을 통해 잘못된 접근 시도로부터 시스템 자원과 사용자 계정을 보호.
  • 시스템 호출(시스템 콜): 사용자 프로그램이 운영체제의 커널 기능을 요청하기 위해 사용하는 인터페이스

시스템 콜

사용자 프로그램이 운영체제의 커널 기능을 요청하기 위해 사용하는 인터페이스.
응용 프로그램이 시스템 콜 인터페이스를 통해 커널 기능을 요청하고, 커널이 해당 루틴을 실행해 결과를 제공한다. 운영체제의 루틴 호출 방식은 프로그램에서 명령어 또는 서브루틴의 호출형태와 시스템에서 명령 해석기를 사용해 대화 형태로 호출하는 방식이 존재한다.

A파일 내용을 새로운 B파일로 복사하는 대표적인 시스템 콜 예시가 있다. 먼저 두 파일의 이름을 알기위해서 키보드 또는 마우스 기반 시스템 등 여러 방법을 통해 수 많은 I/O 시스템 콜이 일어난다. 두 파일의 이름을 획득한 후에는 입력 파일을 열고 출력 파일을 생성 및 열어야한다. 이 과정 속에서도 수 많은 별도의 시스템 콜이 일어난다.

이를 운영체제 관점에서 설명하면 먼저, 응용 프로그램이 read()와 같은 시스템 콜을 호출한다. 이 함수 내부에는 시스템 콜 고유 번호를 인자를 포함하고 인터럽트를 요청한다. 인터럽트 요청이 발생하면 CPU는 사용자(유저) 모드에서 커널 모드로 전환되어 커널 내부의 시스템 콜 핸들러로 진입한다. 시스템 콜 핸들러에서 인자로 전달된 시스템 콜 고유 번호를 갖고 Interrupt Vector 테이블에서 매핑된 호출할 ISR(Interrupt Service Routin)의 주소 값을 획득한다. 이후, ISR에서 실질적인 인터럽트 요청을 수행하고 발생한 결과 값을 사용자 모드로 전환하면서 함께 전달한다.

시스템 콜 유형

  • 파일 관련 시스템 콜: open(), close(), read(), write()
  • 프로세스 제어 시스템 콜: fork(), exit(), exec(), wait()
  • 메모리 관리 시스템 콜: 메모리 할당 및 해제
  • 네트워크 통신: 소켓 생성, 연결, 데이터 송수신
  • 장치 관리: 디바이스 요청, 해제, 읽기, 쓰기
  • 정보 관리: 시간 확인, 지정
  • 보안: chomd(), chown()

시스템 콜 고유 번호

모든 시스템 콜은 고유한 번호를 갖고 있다. 그래서 응용 프로그램은 시스템 콜 호출 시 C 등으로 이루어진 표준 라이브러리를 통해 시스템 콜 고유 번호를 인자로 전달한다. 이를 갖고 커널에서 해당하는 ISR을 찾아 작업을 수행한다.

그래서 각 운영체제는 이를 지원하기 위해서 시스템 콜 종류와 사용법에 대한 API 문서를 제공한다.

운영체제의 Dual Mode

운영체제는 사용자 모드와 커널 모드로 이루어진 Dual Mode 방식을 채택했다. 이는 시스템의 안정성과 보안을 보장하기 위한 조치로써, 만약 응용 프로그램이 직접 하드웨어 자원에 접근하여 작업을 수행하던 중 오류가 발생하면 시스템 전체의 붕괴로 이어지거나 하나의 응용 프로그램이 모든 하드웨어 자원을 점유하는 등의 문제가 발생할 수 있기 때문이다.

사용자 모드

일반 애플리케이션 프로그램이 실행되는 모드로 직접 하드웨어 자원에 접근하거나 제어할 수 없다. 그래서 시스템 콜을 이용해 커널에 요청을 보내는 간접적인 방법을 통해 자원에 접근한다.

커널 모드

운영체제의 핵심 부분인 커널이 실행되는 모드로 모든 시스템 자원에 직접 접근하거나, 특히 중요한 하드웨워 제어나 메모리 관리 등 여러 작업을 수행한다.

학습하며 정리한 글이기 때문에 혼용된 표현 또는 잘못된 내용이 있을 수 있습니다.
만약, 발견하신 경우 댓글을 통해 알려주신다면 진심으로 감사드립니다.

profile
GitHub : https://github.com/dudxo

0개의 댓글