Kernel의 실체

2024. 3. 26. 17:15·컴퓨터 공학(Computer Science)/OS

Kernel의 실체

커널은 컴파일된 바이너리 형태로 스토리지에 있다가 컴퓨터 부팅 시에 메모리에 load된다.

커널 코드는 함수들의 집합

커널 코드는 함수들의 집합이다. 실행 중인 응용 프로그램(메모리에 적재된)을 프로세스라 부른다. 하지만 커널은 프로세스가 아니다.

만약, app2의 실행중에 System Call을 유발시키고 커널이 동작한다고 가정해보자. 그러면 User mode에서 실행중이다가 kernel mode로 바뀌고 kernel code를 실행한다. 여기서 kernel이 프로세스가 되는게 아닌, app2가 프로세스이다. 커널은 프로세스가 아니다.

Kernel이 실행중?

kernel은 단지 응용 프로그램에 의해 System Call, interrupt가 발생하여 커널 코드가 실행되고 있을 뿐

Kernel은 stack이나 heap을 가짐?

Kernel은 애초에 프로세스가 아니기 때문에, 스택, 힙을 가지지 않는다. 만약 app2를 실행하면서 커널에서 스택이 필요할때 app2가 커널 모드에서 사용할 스택을 커널 내에 할당한다. 즉, 커널이 스택을 가지는게 아닌 app2의 커널에 있는 스택인 것.

프로세스마다 커널 스택이 할당된다.


라이브러리

라이브러리란 응용 프로그램에 활용하기위해 미리 함수들을 작성하여 컴파일한 바이너리 파일을 말한다.

  • 표준 라이브러리
  • system call 라이브러리

표준 라이브러리에 포함된 함수들은 운영체제, 하드웨어에 상관없이 이름과 사용법이 같지만, system call 라이브러리는 운영체제 커널과 밀접한 관련이 있기 때문에 함수들의 이름이 운영체제마다 다르다.

system call 라이브러리에 있는 함수들을 system call function이라고 부른다.

요약하자면,

  • 라이브러리 기능 활용 : function call
  • 커널 기능 활용 : system call

function call로 라이브러리 접근

사용자 공간에 적재된 사용자 함수, 같은 주소 공간 내에서 한 함수가 다른 함수의 코드를 실행하는 과정. function call하면 호출한 함수 번지로 점프한후 실행끝나면 실행하던 함수로 돌아옴. 커널 모드로 안바뀌고 사용자 모드에서 실행

system call로 커널 코드 호출

응용 프로그램이 커널의 도움을 받아야할 때. 시스템 호출 라이브러리에 있는 시스템 호출 함수의 도움을 받아서 간접적으로 커널 접근. 시스템 호출 함수는 고유 번호로 커널 함수를 구별한다. 시스템 호출 발생하면, CPU를 커널 모드로 바꾸고 시스템 호출 핸들러 코드를 실행하고 시스템 호출 번호(고유 번호)를 분석하여 해당 커널 함수 실행.

  1. 시스템 호출
  2. CPU Kernel mode 전환
  3. 시스템 호출 핸들러 코드 실행
  4. 고유번호 분석 후 해당 커널 함수 실행

System Call을 일으키는 기계 명령

CPU마다 system call을 일으키는 특별한 기계 명령을 두고 있다. 이것을 시스템 호출 CPU 명령이라고 한다.

  • syscall/sysret

syscall은 시스템 호출을 일으키는 CPU명령, sysret는 시스템 호출 끝내고 사용자 코드로 돌아가도록 하는 명령이다. 시스템 호출을 trap이라고도 부른다.

일반적으로, 시스템 호출 번호(커널 고유 번호), 커널 함수에게 넘겨줄 파라미터 등이 CPU 레지스터들에 미리 저장된 후 CPU명령이 실행된다.


시스템 호출 비용

시스템 호출은 일반적인 함수 호출에 비해서 많은 시간 비용을 가진다. 시스템 호출 과정이 복잡하기 때문임. 커널 모드로 전환, CPU 레지스터에 있는 데이터를 커널 스택으로 옮기고 커널 함수를 호출하는 등, 복잡한 과정이 있기 때문임.

따라서 표준 라이브러리 함수를 사용하는 것을 권장한다.

'컴퓨터 공학(Computer Science) > OS' 카테고리의 다른 글

OS와 인터럽트  (0) 2024.03.30
Kernel, user mode, kernel mode  (0) 2024.03.26
커널과 시스템 호출  (0) 2024.03.25
배치(batch) OS, 다중 프로그래밍, 시분할 시스템  (0) 2024.03.14
'컴퓨터 공학(Computer Science)/OS' 카테고리의 다른 글
  • OS와 인터럽트
  • Kernel, user mode, kernel mode
  • 커널과 시스템 호출
  • 배치(batch) OS, 다중 프로그래밍, 시분할 시스템
Jminu
Jminu
  • Jminu
    뇌 구조가 바이너리
    Jminu
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Web
      • Linux
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
      • Qualcomm 기업과제
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    피보나치
    소수
    가상 주소 공간
    그래서 컴퓨터는 어떻게 동작하나요?
    yolo
    순환
    동적메모리
    백준
    C++
    루빅보드
    파이썬
    커널
    스택
    자료구조
    포인터
    commit
    이진 트리
    INIT
    rubikpi
    c언어
    Qualcomm
    Branch
    Batch OS
    파일 입출력
    Git
    권머현
    rubik pi
    버퍼
    rubikpi3
    rubik pi 3
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Jminu
Kernel의 실체
상단으로

티스토리툴바