ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 임시 - Linux Kernel - Introduction ( 고건 교수님 OLC 강의 )
    Linux Kernel 2024. 6. 29. 23:36

    1장 - Introduction ( 임시 )

    강의는 Linux Kernel Development - 책을 바탕으로 함. - 입문서라고 함.

    OS를 하나의 프로그램으로 만든 것이 아니라 여러 개로 잘게 나눔

    → 부팅하는 데, 시간을 줄일 수 있다.

    kernel, shell, utility 로 나눌 수 있다.

    • 커널
    • utility
    • shell

    다시 정리하면, utility를 부르는 3가지 단어는 아래와 같다.

    utility, command, job .

    • file
    • standard file

    부팅을 하면 맨 처음에

    kernel a.out 이 올라온다. (커널 프로그램이 올라온다. )

    유저가 터미널에 전원을 공급하면,

    그 터미널 위에서 shell 프로그램이 올라온다. (sh a.out)

    shell에서는 command를 입력받을 때까지 기다린다.

    키보드로 command를 입력하면, 그에 대응되는 utility를 디스크에서 가져와 execute한다.

    hierarchy 그림에 대해서는 꼭 여기다가 넣어볼 것.

    꼭 알아야 할 내용 : kernel, utility, shell이 무엇인가?만큼은 알아가자.

    linux 와 windows의 비교

    Linux

    • Multi-user system
    • protection에 신경을 많이 써야 됨.
    • 자원을 쓸 때,
    • CUI 쪽으로 많이 쓰임.

    windows

    • personal 컴퓨터→ single- user System
    • protection에 별로 신경 안써도됨.
    • 자원을 쓸 때,
    • 아무래도 가능한 자원을 최대한 쓰려고 하다 보니 GUI 발달

    windows에서는 아이콘 형식으로 사용할 수 있는 utility를 보여줬다.

    linux에서는 내가 command를 외우고 있어야 하고, 확인을 하려면 man command를 쳐줘야 한다.

     

    대신 windows에서는 자원을 많이 잡아 쓰고 있고,

    linux에서는 자원을 최소한으로 아껴 쓰고 있다.

     

    Multi user system - Protection

     

    한 프로세스에서 다른 프로세스의 정보를 illegal 하게 읽거나 쓰려고 한다면?

    개인 정보는 보통 메모리 / 디스크에 있다.

    prevent 해야 하는 영역임. (사후 처리는 말도 안됨 )

    CPU는 하나이고 프로그램은 여러 개,

    I/O 연산 작업을 반드시 커널에게 부탁해서 사용하게 끔 해서 문제 해결. ( I/O 요청이 legal한지 먼저 확인을 하고, I/O를 해줌. )

     

    커널에게 I/O를 요청하는 행위를 system call이라고 부른다.

    system call을 돕기 위해 cpu에 한 바이너리 bit가 있다. (mode bit )

    비트값을 바탕으로 유저 모드, 커널 모드로 나뉜다.

     

    커널 모드일 때는 CPU는 어떤 메모리 영역도 다 접근할 수 있다.

    유저 모드일 때는 CPU는 현재 프로그램의 address space에만 접근할 수 있다.

     

    커널 모드일 때는, 어떤 instruction이든 수행할 수 있지만,

    유저 모드일 때는 I/O instruction이나 특수 instruction을 수행할 수 없다.

    CPU mode
    memory
    opcode
    kernel
    access all
    execute any
    user
    내 영역만
    restricted previleged op-code

    privileged op-code 는 i/o instruction , 특수 레지스터에 접근하는 명령어, 다른 영역에 영향을 끼칠 수 있는 명령어들을 말한다.

    cpu와 메모리 사이에 MMU ( memory management unit ) 이라는 하드웨어가 있다.

    유저 모드일 때는,

    cpu에서 메모리로 가는 버스에서의 address를 MMU가 보고 range 안에 들어오는지 아닌지 확인을 한다. (메모리 구경도 못하고 날아간다. )

    커널 모드일 때는,

    아무런 제약이 없다.

     

    유저 모드일 때는,

    instruction을 갖고 왔을지라도(fetch), decode하고 execute 하기 전에

    해당 opcode가 사용가능한지 확인하게 된다.

     

    내 코드에서

    “디스크 파일 x에서 다음 바이트를 읽어 내 변수 Y에 넣어라.”라는 I/O명령은 컴파일 단계에서 바뀌게 된다.

     

    컴파일러는 read와 write가 나오는 곳 마다 chmodk를 실행하게끔 한다. ( change cpu protection mode to kernel 의 약자 )

     

    컴파일을 거친 후 내 이진 a.out에는 I/O statement가 나오지 않는다.

    chmodk는 previleged instruction이다.

     

    컴파일러가 내 프로그램에 chmodk를 넣어놓게 되면

    cpu를 뺏기게 되면서, trap이 걸리게 된다.

     

    물론 trap으로 가기 전에 관련 정보를 parameter로 다 남겨놓는다.

    프로그램은 유저모드와 커널모드의 변환을 반복한다.

     

    모든 프로그램은 유저 스택과 커널 스택 두 개를 가지게 된다.

    (이유는 다음에 정리 )

     

     

Designed by Tistory.