Dev

[Dev] Unix의 구조, 커널과 시스템 호출

너굴먹 2024. 4. 29. 23:05

유닉스(Unix)

  • 단순성 : 최소한의 필요한 기능만 제공합니다, 또한 모든 주변장치들을 파일로 취급합니다

  • 이식성 : 유닉스는 고급언어인 C 언어로 작성되었으므로 다른 하드웨어 플랫폼으로 이식할 수 있습니다. 이러한 이식성은 임베디드 시스템에서 슈퍼컴퓨터에 이르기까지 광범위한 장치에서 실행될 수 있습니다

  • 개방성 : 전체 소스 코드가 사람들에게 무료로 제공되는 오픈 소스 운영 체제입니다 즉, Unix 상의 많은 소프트웨어들은 개발·공개·공유하기 유용합니다 

Unix 시스템 구조

유닉스 시스템 구조


커널(kernel)

커널의 역할

  • 프로세스 관리 : CPU에서 프로세스를 예약하고 실행을 관리하며 효율적인 멀티태스킹을 보장하여 여러 프로그램이 동시에 실행될 수 있도록 합니다

  • 메모리 관리 : 주 메모리(RAM)를 할당 및 관리하여 사용 가능한 메모리 리소스의 효율적인 활용을 보장하고 메모리 보호 및 가상 메모리 관리를 위한 메커니즘을 제공합니다

  • 파일 관리 : 디스크, 저장장치에서 파일을 구성하고, 파일 I/O 작업을 처리하고, 파일 권한 및 보안 정책을 시행하여 파일을 관리합니다

  • 변 장치 관리 : 모니터, 키보드, 마우스, 저장 장치 및 네트워크 인터페이스와 같은 주변 장치를 관리하고 장치 드라이버를 제공하고 장치 관련 작업 및 구성을 처리합니다

  • 통신 관리 : 주변 장치와의 통신을 포함하여 프로세스와 장치 간의 통신을 용이하게 합니다

시스템 호출(System calls) & C 라이브러리

시스템콜, C라이브러리의 구조

시스템 호출(system calls)은 Unix 커널에 서비스를 요청하기 위해  함수처럼 호출할 수 있는 인터페이스를 제공합니다
즉, 프로그램이 실행되는 동안 필요한 운영 체제의 서비스를 사용할 수 있도록 합니다

C 라이브러리 함수는 시스템 호출을 감싸고 있는(wrapper) API 역할을 합니다
이 라이브러리 함수들은 사용자가 좀 더 편리하게 시스템 호출을 사용할 수 있도록 도와줍니다

시스템 호출 과정 (open() 시스템 호출)

  1. 사용자 프로세스에서 시스템 호출
  2. C 런타임 라이브러리는 이러한 매개변수를 레지스터를 통해 전달하거나 스택에 저장하여 커널로 전달합니다.
  3. trap 명령어를 실행해 커널로 점프합니다  
  4. 이때, 벡터 테이블을 사용하여 해당 시스템 호출의 시작 주소를 찾아 커널 코드로 점프합니다.
  5. 커널시스템 호출을 처리하기 위한 코드를 실행합니다.
  6. 시스템 호출이 완료되면, 커널은 결과를 사용자 프로세스에 반환하고 다시 사용자 모드로 전환합니다.
주요 자원 시스템 호출 syscall()
파일 open(), close(), read(), write(), dup(), lseek() ...
프로세스 fork(), exec(), exit(), getpid(), getppid() / pipe(), socket() 등
메모리 malloc(), calloc(), free() 등
시그널 signal(), alarm(), kill(), sleep() 등

 

  •  출처 / 리눅스 프로그래밍, 창병모