IT공부

[운영체제] 시스템 콜(System Call)

shine94 2025. 2. 27. 20:02

* 시스템 콜(System Call)

   사용자 모드에서 운영체제(OS)의 커널의 기능을 요청할 수 있도록 제공되는 인터페이스

   (예) 운영체제(OS)의 API

          ㄴ 유저는 시스템 콜을 사용하여 OS에 요청을 보냄

          ㄴ 시스템 콜이 실행되면 커널이 직접 동작하여 요청을 처리하고 결과를 반환

 

* 프로그램에서 시스템 콜을 호출하면 사용자 모드 → 커널 모드로 전환되어 OS가 직접 작업을 수행한다

 

* 필요한 이유

   운영체제는 보안과 안정성을 위해 커널과 사용자 공간을 분리한다

   사용자의 프로그램이 커널 기능을 직접 호출할 수 없기 때문에, 시스템 콜을 통해서만 기능을 요청할 수 있다

 

* 시스템 콜과 함수의 차이

  함수 시스템 콜
실행 모드 사용자 모드(User Mode) 커널 모드(Kernel Mode)
역할 단순 연산,
할당된 메모리 내 데이터 접근,변경 및 복사
(할당은 시스템 콜에서 진행)
OS 기능 요청
(파일 I/O, 프로세스 제어 등)
예시 strlen(), printf(), strcpy() read(), write(), fork()
속도 빠름
(모드 전환 없음)
상대적으로 느림
(사용자 → 커널 모드 전환 발생)

 

* 스템 콜과 언어의 차이

  언어 시스템 콜
실행 모드 사용자 모드(User Mode) 커널 모드(Kernel Mode)
목적 코드 로직 작성, 알고리즘 구현 OS 기능 사용(파일, 프로세스, 메모리 등)
예제 printf(), strlen(), for, if write(), read(), fork(), exec()
직접 하드웨어 접근? ❌ 불가능 ✅ 가능 (커널을 통해 접근)
속도 빠름
(모드 전환 없음)
상대적으로 느림
(사용자 → 커널 모드 전환 발생)

 

* <windows.h>에 있는 모든 함수가 시스템 콜은 아님

   ㄴ 시스템 콜을 감싸는 레퍼(wrapper) 역할을 하는 경우가 많지만, 직접적인 시스템 콜은 아님

   ㄴ 순수한 시스템 콜을 호출하려면 ntdll.dll의 Nt 또는 Zw 계열 함수를 직접 호출해야 함

 

* 시스템 콜 자체는 실행 파일(.exe)이 아니라, 운영체제의 일부임

   ㄴ OS 커널 내부에서 C 언어와 어셈블리(Assembly)로 작성

   ㄴ 시스템 콜은 실행 파일(.exe)처럼 독립적인 프로그램이 아님, 운영체제(OS) 커널 내부에 구현된 기능

 

* 시스템 콜과 cmd(명령 프롬프트, Command Prompt, cmd.exe) 명령어 차이

  명령 프롬프트 시스템 콜
실행 모드 유저 모드(User Mode) 커널 모드(Kernel Mode)
역할 OS 기능을 수행하는 프로그램을 실행 운영체제(OS) 기능을 직접 수행
예제 dir, copy, mkdir, ping sys_read(), sys_write(), sys_fork()
실행 방식 일반적인 응용 프로그램 실행 방식 운영체제가 제공하는 인터페이스를 통해
커널 기능을 호출
(예: syscall, INT 0x80, WinAPI 등)
독립적 실행 가능? ✅ 독립적인 프로그램(cmd.exe 내부) ❌ (OS 커널 내부 코드)
속도 빠름
(모드 전환 없음)
 
상대적으로 느림
(사용자 → 커널 모드 전환 발생)

 

* Windows에서 실행 가능한 명령어들은 크게 두 가지

  내부 명령어 (Built-in Command) 외부 명령어 (External Command)
  cmd.exe가 직접 실행 독립적인 실행 파일(.exe)
  cd, dir, echo ping.exe, notepad.exe

 

[예시] cd 명령어

   - cmd.exe 내부에 포함된 명령어

   - cmd.exe 내부에서 SetCurrentDirectoryW() 함수를 호출하여 동작하는 구조

      ① cd 명령어 입력

          cd C:\Windows

      ② cmd.exe가 내부적으로 경로를 변경

          SetCurrentDirectoryW() WinAPI 함수를 호출하여 현재 디렉터리 변경.

      ③ 결과를 출력

          cmd.exe가 변경된 경로를 반영하고 프롬프트(C:\Windows>)를 업데이트

 

* Windows API와 cd 명령어의 차이

  Windows API cd 명령어
실행 위치 Windows 커널에서 실행 cmd.exe 내부에서 실행
실행 방식 직접 OS 기능 실행 SetCurrentDirectoryW() 호출
예제 NtCreateFile(), NtReadFile() cd C:\Windows
독립적 실행 가능? ✅ (OS 내부) ❌ (cmd.exe 내장)

 

* cd 명령어는 커널이 직접 실행하는 시스템 콜이 아니라, cmd.exe가 내부적으로 실행하는 명령어이다!

 

* 쉘(Shell)

   운영체제와 사용자를 연결하는 인터페이스

 

* cmd(명령 프롬프트, Command Prompt, cmd.exe)

   Windows에서 제공하는 쉘 프로그램

 

* 쉘 스크립트(Shell Script)

   쉘(Shell)에서 실행할 수 있는 명령어들의 집합으로,

   프로그래밍 언어처럼 명령을 자동으로 실행할 수 있도록 작성된 파일