Dev
[Dev] Unix의 구조, 커널과 시스템 호출
너굴먹
2024. 4. 29. 23:05
유닉스(Unix)
- 단순성 : 최소한의 필요한 기능만 제공합니다, 또한 모든 주변장치들을 파일로 취급합니다
- 이식성 : 유닉스는 고급언어인 C 언어로 작성되었으므로 다른 하드웨어 플랫폼으로 이식할 수 있습니다. 이러한 이식성은 임베디드 시스템에서 슈퍼컴퓨터에 이르기까지 광범위한 장치에서 실행될 수 있습니다
- 개방성 : 전체 소스 코드가 사람들에게 무료로 제공되는 오픈 소스 운영 체제입니다 즉, Unix 상의 많은 소프트웨어들은 개발·공개·공유하기 유용합니다
Unix 시스템 구조
커널(kernel)
- 프로세스 관리 : CPU에서 프로세스를 예약하고 실행을 관리하며 효율적인 멀티태스킹을 보장하여 여러 프로그램이 동시에 실행될 수 있도록 합니다
- 메모리 관리 : 주 메모리(RAM)를 할당 및 관리하여 사용 가능한 메모리 리소스의 효율적인 활용을 보장하고 메모리 보호 및 가상 메모리 관리를 위한 메커니즘을 제공합니다
- 파일 관리 : 디스크, 저장장치에서 파일을 구성하고, 파일 I/O 작업을 처리하고, 파일 권한 및 보안 정책을 시행하여 파일을 관리합니다
- 주변 장치 관리 : 모니터, 키보드, 마우스, 저장 장치 및 네트워크 인터페이스와 같은 주변 장치를 관리하고 장치 드라이버를 제공하고 장치 관련 작업 및 구성을 처리합니다
- 통신 관리 : 주변 장치와의 통신을 포함하여 프로세스와 장치 간의 통신을 용이하게 합니다
시스템 호출(System calls) & C 라이브러리
시스템 호출(system calls)은 Unix 커널에 서비스를 요청하기 위해 함수처럼 호출할 수 있는 인터페이스를 제공합니다
즉, 프로그램이 실행되는 동안 필요한 운영 체제의 서비스를 사용할 수 있도록 합니다
C 라이브러리 함수는 시스템 호출을 감싸고 있는(wrapper) API 역할을 합니다
이 라이브러리 함수들은 사용자가 좀 더 편리하게 시스템 호출을 사용할 수 있도록 도와줍니다
- 사용자 프로세스에서 시스템 호출
- C 런타임 라이브러리는 이러한 매개변수를 레지스터를 통해 전달하거나 스택에 저장하여 커널로 전달합니다.
- trap 명령어를 실행해 커널로 점프합니다
- 이때, 벡터 테이블을 사용하여 해당 시스템 호출의 시작 주소를 찾아 커널 코드로 점프합니다.
- 커널은 시스템 호출을 처리하기 위한 코드를 실행합니다.
- 시스템 호출이 완료되면, 커널은 결과를 사용자 프로세스에 반환하고 다시 사용자 모드로 전환합니다.
주요 자원 | 시스템 호출 syscall() |
파일 | open(), close(), read(), write(), dup(), lseek() ... |
프로세스 | fork(), exec(), exit(), getpid(), getppid() / pipe(), socket() 등 |
메모리 | malloc(), calloc(), free() 등 |
시그널 | signal(), alarm(), kill(), sleep() 등 |
- 출처 / 리눅스 프로그래밍, 창병모