Kernel, user mode, kernel mode

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

User mode, Kernel mode

CPU는 User mode, Kernel mode 2가지 중 한 모드에서 동작한다. 어떤 모드로 동작할 것인지는 CPU내의 mode register에서 결정한다.

응용 프로그램은 user mode에서, 커널 코드는 kernel mode에서 동작한다.


User mode

User mode에서는 User Space만 접근할 수 있다. 만약, Kernel Space에 접근하게 되면 오류를 발생시킨다. User mode에서는 어떤 하드웨어에도 접근할 수 없다. 또 다른 응용 프로그램에게 할당된 메모리에도 접근할 수 없다.

특권 명령(privileged instruction)도 실행할 수 없다.

Kernel mode

kernel mode 에서는 모든 메모리 공간 접근가능하며, 특권 명령을 실행할 수 있다. 커널 코드는 커널 모드일 때 실행되기 때문에 모든 명령 가능하다.


mode 전환

user mode에서 kernel mode로 전환이 일어나는 경우는 2가지다.

  • system call
  • interrupt

항상 커널 접근을 위해서는 system call과, interrtupt 2가지 방법만 있다는 것을 알아두자. 왜냐면 시스템 보안, 안전성을 위해서(이미 실컷 얘기 했음)

system call시 CPU 기계 명령이 실행되고, 이것에 의해 user mode에서 kernel mode로 바뀐다. system call이 끝나면 다시 기계 명령이 실행되고 user mode로 전환된다.

interrupt시 CPU는 자동으로 user mode에서 kernel mode로 바뀌고 ISR()을 실행한다. ISR()이 커널 공간에 있기 때문임. ISR()끝나면 다시 user mode로 전환 하던일 마저 한다.


특권 명령

특권 명령은 kernel mode에서만 사용할 수 있다. CPU제조 업체에 의해 설계된 기계 명령

  • I/O 명령
  • Halt 명령
  • interrupt flag
  • 타이머
  • context switching

그렇게 중요하진 않은듯..


user mode와 kernel mode는 CPU의해 구현된다. 커널에 의해 구현되는 것이 아님.

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

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

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파일 입출력
    과속탐지
    INIT
    권머현
    커널
    포인터
    동적메모리
    스택
    C++
    commit
    Qualcomm
    arm
    소수
    Git
    thumb2
    이진 트리
    Branch
    c언어
    rubikpi
    파이썬
    순환
    rubik pi
    버퍼
    자료구조
    백준
    ptrace
    피보나치
    aapcs
    yolo
    rubikpi3
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Jminu
Kernel, user mode, kernel mode
상단으로

티스토리툴바