* 시스템 콜(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)에서 실행할 수 있는 명령어들의 집합으로,
프로그래밍 언어처럼 명령을 자동으로 실행할 수 있도록 작성된 파일
'IT공부' 카테고리의 다른 글
[C++] const T&(읽기 전용 참조), T&&(우변 참조, 이동 가능) (0) | 2025.03.22 |
---|---|
[C++] 참조값 리턴 (0) | 2025.03.22 |
[C] C언어 전역변수, static 변수 vs Java static 변수 (0) | 2025.02.11 |
[C] 문자열 함수 (0) | 2025.02.01 |
[ETC] 메모리 원자성과 DB 원자성 (0) | 2025.01.24 |