운영체제

6. 시스템 콜(System Call)

ggomjiu 2025. 1. 23. 03:11

운영체제(Operating System)

: 컴퓨터 시스템의 하드웨어, 소프트웨어 자원들을 효율적으로 운영 및 관리함으로써 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 도와주는 시스템 소프트웨어

- 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층

-> 즉, 중계자 역할을 하는 프로그램

 

커널(Kernel)

: 운영체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러가지 서비스를 제공하는 운영체제의 핵심 부분

- 컴퓨터 전원을 켜면 운영체제는 커널과 동시에 수행됨

- 소프트웨어가 컴퓨터 시스템에서 수행되기 위해서는 메모리에 그 프로그램이 올라가있어야 함

- 운영체제 자체도 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라가야 함

- But, 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라가면 한정된 메모리 공간의 낭비가 심해짐

- 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓음 -> 필수적이지 않은 부분은 필요할 때 메모리에 올려서 사용

-> 이때, 메모리에 상주하는 운영체제의 부분이 커널

 

1. 커널의 역할

  • 보안
  • 자원 관리
  • 추상화

- 컴퓨터 자원 : CPU 메모리, 가상 메모리, 키보드 마우스 등 물질적인 것과 스레드, 패킷, 프로토콜, 테스크와 같은 추상적인 것들로 구성

- 자원을 효율적으로 관리하기 위해 CPU 스케줄링, 메모리 관리, 입출력 관리, 파일 시스템 관리 등의 업무를 수행

운영체제는 여러 프로그램이 동시에 실행될 수 있는 다중 프로그래밍 환경에서 동작

- 프로그램들 사이의 충돌이 발생하지 않게 이중 동작 모드 기법을 사용

 

2. 이중 동작 모드(Dual - mode Operation)

- 운영체제의 원활한 작동과 기능을 위해서 사용자의 시스템 자원 접근을 제한하는 보호 장치

 

1) 사용자 모드(User Mode)

: 일반 사용자가 접근할 수 있는 영역을 제한적으로 두고, 프로그램 자원에 함부로 침범하지 못하게 하는 모드

- 사용자는 사용자 모드에서 코드를 작성하고 프로세스를 실행하는 등의 행동을 함

- 시스템에 중요한 영향을 미치는 연산은 커널 모드에서만 실행 가능하게 함으로써 하드웨어의 보안을 유지

- 접근을 위해서는 시스템 콜을 사용해야 함

 

2) 커널 모드(Kernel Mode)

: 운영체제가 CPU의 제어권을 가지고 운영 체제 코드를 실행하는 모드

- 수퍼바이저 모드(Supervisor Mode), 특권 모드(Previliged Mode), 시스템 모드(System Mode)라고도 불림

- 시스템의 모든 메모리에 접근 가능하며 모든 종류의 CPU 명령을 실행할 수 있음

- 운영체제 코드나 디바이스 드라이버 같은 커널 모드 코드를 실행함

- 디바이스 드라이버

  • 특정 하드웨어나 장치를 제어하기 위한 커널의 일부분으로 동작하는 프로그램
  • 컴퓨터를 구성하는 다양한 입출력 장치마다 각각 장치 드라이버가 프로그램 커널에 통합되어 실행됨

 

시스템 콜(System Call)

: 운영체제에서 제공하는 서비스들을 사용하기 위한 프로그래밍 인터페이스 

- 보통 직접적으로 시스템 콜을 사용하기 보다는 API를 통해 사용하게 됨

- C, C++ 같은 고급 언어로 작성된 프로그램들은 직접 시스템 콜을 할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법

- 운영체제는 메모리에 프로그램 적재, I/O 처리, 파일 시스템 처리 등 여러 서비스들을 제공하고, 사용자 프로세스는 시스템 콜을 통해 서비스를 제공받음

- 각 시스템 콜에는 번호가 할당되고 시스템 콜 인터페이스는 이러한 번호에 따라 인덱스되는 테이블이 유지됨

 

1. 시스템 콜 종류

  • 프로세스 제어
  • 파일 조작
  • 디바이스 조작
  • 정보 유지
  • 통신 보호

 

2. 시스템 콜 EXAMPLE

cp in.txt out.txt

- 일반적으로 윈도우 운영체제의 경우 마우스, 리눅스 운영체제의 경우 키보드가 사용자의 입력을 받음

-> 이때, I/O 시스템 콜을 사용

  1. 위와 같은 문장을 입력받아서 cp 프로그램을 실행시킴
  2. in.txt 파일이 현재 디렉토리에서 접근할 수 있는 파일인지 검사하기 위해 시스템 콜 호출
  3. 만약 파일이 존재하지 않는다면, 에러를 발생시키고 프로그램을 종료하는데 시스템 콜 사용
  4. 만약 파일이 존재할 경우, 복사한 파일을 저장하기 위해 out.txt 파일 명이 있는지 검사
  5. 파일 명이 존재하는지 존재하지 않는지 검사하기 위해 시스템 콜을 통해 확인
  6. 파일이 이미 존재한다면 엎어 씌워야 할지 아니면 이어 붙여야 하는지 사용자에게 물어볼 수 있음
  7. 만약 저장하고자 하는 파일 이름이 겹치지 않는다면, 파일을 저장해야 핳 때도 시스템 콜 사용