CSAPP 8장 번외편 | 운영체제, 커널, CPU, 시스템 콜 정리

맹쥐·2025년 4월 23일
post-thumbnail

앞서 사용자모드/ 유저모드/ 시스템콜에 대해 간단히 알아본 적이 있다.
CS:APP 8장을 읽다보니, 개념적인 부분에서 혼동이 와서
좀 더 알아보려 한다.


사용자 모드 vs 커널 모드?

컴퓨터는 아주 똑똑하면서도, 엄청 조심성이 많은 기계다.
그래서 "누가 뭘 할 수 있는지"를 아주 명확하게 나눠놓는다.
( cs:app 공부하는 내내 느꼈다. 컴퓨터는 책임의 주체를 늘 명시해둔다. 🖥️)

이전 글에서 사용했던 그림을 재사용하겠다. 😊

사용자 모드(User Mode)
→ 일반 사용자 프로그램이 실행되는 안전한 공간

커널 모드(Kernel Mode)
→ 운영체제가 실행되는 최고 권한의 영역 (모든 걸 할 수 있음)

CPU는 이 두 모드를 왔다 갔다 할 수 있게 만들어져 있다.
→ "일반적인 상황에서는 사용자 모드,
→ 시스템적으로 중요한 일이 생기면 커널 모드!

이렇게 구분하면 시스템이 훨씬 더 안정적이고 안전하게 돌아간다.
좀 더 자세히 살펴보자.


사용자 모드

말 그대로, 일반 사용자 프로그램이 실행되는 공간이다.

ls, vim, gcc, 내가 짠 main() 함수 같은 것들 전부 다 사용자 모드에서 실행된다.
메모리/장치 접근이 제한돼 있다.(보안 + 안정성 때문!)

예시

int main() {
   printf("hello\n");  // 여기까진 사용자 모드!
}

사용자모드에서 커널모드로 넘어가는 흐름을 자세히 살펴보자.

printf() 함수는 C 표준 라이브러리의 함수이다.
아직 커널 기능은 사용 안 했고, 그냥 일반적인 함수 실행 중이므로 아직까지 사용자모드다.

printf() 내부에서는 write() 시스템 콜을 호출한다.
이 시점에 커널에게 "화면에 출력 좀 해줘요!" 하고 요청서가 들어가는것이다.

➡️ 이렇게 커널 모드로 전환된다.
커널이 요청서를 받아서 작업을 처리한 후, 다시 사용자 모드로 복귀한다.


커널 모드

커널 모드(Kernel Mode)
컴퓨터 시스템 안에서 가장 높은 권한을 가진 환경이다.

우리가 사용하는 일반 프로그램들은 이곳에 직접 들어올 수 없고,
오직 운영체제의 핵심 부분인 커널만 이 커널 모드에서 실행된다.


개념 시각화 (만화로 이해하기)

CSAPP 8장을 읽다 보니,
운영체제 / 커널 / 커널모드 / 유저모드 / 시스템 콜 / CPU ...
이 모든 개념이 머릿속에서 한데 엉켜버렸다.

그래서 또 그림으로 한번 표현해봤다. 😅

1️⃣ 전체 구조 이해

  • 운영체제(OS) 를 하늘에서 컴퓨터 전체를 바라보는 총 책임자로 비유했다. ☁️
  • 운영체제의 핵심 엔진인 커널은 요청이 들어오면 커널모드로 발령 받아 일을 처리하는 관리자이다.
  • CPU는 컴퓨터의 뇌이자, 실질적 실행주체이다.
    유저 모드에서 일하다가 커널의 호출에 따라 커널 모드로 이동해 일하기도 한다.

2️⃣ 시스템 콜 발생

이때, 시스템 콜 호출이 발생한다.
운영체제가 요청을 받아 커널모드커널에게 요청을 넘긴다.

3️⃣ 커널 모드 진입 (트랩 발생)

운영체제가 명령을 내리면,
CPU트랩(trap)이라는 통로를 통해 커널 모드로 이동한다.

4️⃣ 작업 완료 후 유저 모드 복귀

일을 끝낸 CPU는 다시 유저모드로 ✨뿅하고 이동한다.
이제 다음 사용자 명령어를 계속 실행할 수 있다.

커널은 말 그대로 요청이 있을 때만 나와서 처리하고,
끝나면 유저모드로 컨트롤을 다시 넘겨주는 구조다.


요약하자면

구성 요소역할
운영체제(OS)컴퓨터 전체를 총괄 지휘하는 관리자
커널(Kernel)OS의 핵심. 요청이 있을 때 커널 모드에서 처리
CPU실제로 모든 명령을 실행하는 뇌. 사용자/커널 모드 어디든 간다
시스템 콜사용자 프로그램이 커널에게 요청을 보내는 공식 절차
트랩(Trap)사용자 → 커널 모드 전환 시 사용되는 통로
profile
이유민

0개의 댓글