[운영체제] 사용자 모드와 커널구조

Yeongsan Son·2021년 6월 23일
0

CPU Protection Rings

  • CPU도 권한 모드를 가지고 있다. (Intel CPU 기준)
    • 사용자 모드(user mode): 일반적인 명령 (Ring3)
      • 응용 프로그램이 사용
    • 커널 모드(kernel mode): 특정한 명령어 실행과 원하는 작업 수행을 위한 자원 접근을 가능하도록 하는 모드(Ring0)
      • OS가 사용

사전적 정의에 의한 커널: 1. (견과류.씨앗의) 알맹이 2. (사상.주제의)핵심
커널이란? OS의 핵심 기능

사전적 정의에 의한 쉘: (달걀.견과류 등의 딱딱한) 껍데기, 2고둥 껍데기 모양의 것
쉘이란? OS와 사용자 간의 연결고리 역할을 하는 커널의 껍데기(OS와 사용자 사이에 있기 때문)

  • 응용프로그램과의 관계:
    시스템 호출 인터페이스를 기준으로
    위쪽은 사용자 영역: 시스템콜 + 응용프로그램
    아래쪽은 커널 영역: OS + 하드웨어 자원 , 시스템 콜은 운영체제에서 커널모드로 진입해 실행

다음과 같은 명령을 컴퓨터에 실행한다고 가정해보자.

1. 1 ~ 1000까지 합을 구하고
2. 파일에서 데이터 가져오고
3. 해당 데이터와 1 ~ 1000의 합을 더하고 출력한다.

여기서 1번과 3번은 응용프로그램에서 처리가 될 수 있는 부분이고
2번은 OS를 통해서 하드웨어 자원에 접근해서 데이터를 가지고 와야 한다.
이 예제를 통해서 보면, 명령에 따라서 OS를 사용할 수도 사용하지 않을 수도 있다는 것을 알 수 있다.

커널 모드로 실행하는 시스템콜

  • 커널 모드에서만 실행 가능한 기능들이 있다
    • 응용프로그램 -> 시스템콜 -> 커널 -> CPU
    • 응용프로그램 -> CPU : 사용자 모드로서 실행 불가
  • 커널 모드로 실행하려면, 반드시 시스템 콜을 거쳐야함
  • 시스템 콜은 운영체제를 제공한다

실생활에서의 사용자 모드와 커널 모드

  • 주민등록등본을 발급 받는 과정과 유사
    • 발급기관이 특별한 발급 권한을 가지고 있는 것처럼 커널 모드 유사함
    • 사용자가 발급 시스템을 통제하지 못하는 것처럼 응용프로그램 역시 컴퓨터 시스템을 통제하지 못함

코드로 보는 사용자 모드와 커널 모드

#Include <unistd.h>
#Include <sty/types.h>
#Include <sys/stat.h>
#Include <fcntl.h>

Int main() 
{
  int fd:
  fd = open('data.txt'.O_RDONLY);
  if(fd=-1)
  {
    printf("Error: can not open file₩n");
    /*파일을 열지 못했으므로 종료*/
    return 1;
  }
  else
  {
    printf(*File opend and now close_₩n*);
    close(fd);
    return ();
  }
}
  • 파일은 저장매체에 있기 때문에 OS를 통해서 하드웨어 자원에 접근

    • open() API -> 시스템 콜 호출
    • 커널 모드로 전환
    • open() 함수를 처리하는 sys_open() 커널 함수 호출
    • 파일 열기 수행
    • 사용자 모드로 전환
    • open() 함수 이후의 프로그램 실행
  • 파일을 오픈하는 이외의 코드들은 사용자 모드에서 처리

  • 사용자 프로그램: open() 함수 호출

#include <unistd.h> /*라이브러리*/

main(){
open()
  • 헤더 파일: 헤더 파일로 시스템 콜을 사용할 수 있도록 제공
unistd.h 파일
open 선언
  • 커널: open() 함수가 호출되면 sys_opne() 함수를 호출
open() => sys_open()

정리

  • 운영체제는 시스템콜을 제공
  • 프로그래밍 언어별로 운영체제 기능을 활용하기 위해서 시스템 콜을 기반으로 API 제공
  • 응용 프로그램은 운영체제 기능이 필요할 때, 해당 API를 사용해 프로그램을 작동
  • 응용 프로그램이 실행되서, 운영체제 기능이 필요한 API를 호출하면, 시스템 콜이 호출되고, 커널모드로 변경되어 OS 내부에서 해당 명령이 실행되고, 다시 응용프로그램으로 돌아감
profile
매몰되지 않는 개발자가 되자

0개의 댓글