ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 💻 [OS 오퍼레이팅시스템] #4 | Resource protection and System Call | Kernel, User, Dual-mode, Protection, Mode Switch
    CS/OS 2022. 4. 15. 17:01

     

     


    💻 커널 & 유저 프로그램

     - Kernel

    OS의 메모리 상주(위치) 부분. 커널은 메모리에 항상 상주

    다수가 C로 쓰여져 있으며 나머지는 어셈블리어

    함수의 집합으로 구성

     

     - Utility (커널 아닌 것들 대부분)

    시스템 utility or 유저 utility

    디스크의 상주 부분. 요청이 올 때 메모리에 올라옴 (커널과 차이점)

     

     - Shell 

    스페셜 utility. 유틸리티를 제어하는 유틸리티(ex. 메모리에 올림, 내림) Command Control

     

     - 프로세스 

     프로그램이 메모리에 올라와서 실행가능한 프로그램 (또는 실행중)


    💻 듀얼모드 수행

     - Dual-Mode 

    두 모드간 차별화를 위한 하드웨어 지원을 제공한다. 커널모드는 관리자 권한(super), 유저모드는 제약 존재

      op-code 메모리 CPU 레지스터
    커널 모드 어떤 op-code든 실행
    (특권 명령어)
    어디든 접근 가능 어느 레지스터든 접근 가능
    유저 모드 특권 명령어 X 자신의 메모리만 접근 가능 스페셜한 레지스터 X

     

     - Dual-Mode Operation 

    user는 I/O에 바로 접근 불가능하고 특권 명령어 사용해야 가능.

    page table pointers, TLB load로 메모리 관리 상태 조작

    mode bits(kernel mode) 모드 체인지

     

     - Mode Switch 

    mode bit : kenel(0) or user(1)

    interrupt나 exception, system call 발생 -> H/W가 커널모드로 스위치

    다시 user모드로 돌아와야 하므로 모드스위치는 총 2번 유발된다. -> overhead 고려


    💻 자원 보호

    1. CPU Protection

     - CPU Protection mechanism

    CPU의 독점 방지(protection은 security와 다름), user 프로그램이 infinite loop에 빠질 수 있다.

    timer 지원 (e.g. SMP의 local APIC 필요)

     

     - System Timer 

    주기적으로 Intr 발생시키며, 한번 타이머가 intr 발생시키면, 커널로 간다(control is back to OS)

    time sharing에 사용되며, wall time(절대시간) 업데이트에 사용됨

    타이머는 특권(privileged)이기 때문에 OS만 load 가능

     

    상대시간 제공. Intr 발생 빈도 증가하면 섬세하지만 overhead가 증가하게 된다.

     

    * 상대시간 (Relative Time) : (ex. 5 seconds (from now)) 자원 관리적 측면에서 더 필요

    * 절대시간 (Absolute Time) :  (ex. 20 March 2022)

     

     - PIT (Programmable Interval Timer)

    시스템 타이머를 구성. 상대시간을 제공한다. xtime을 업데이트 한다.

    인터럽트 발생 rate : HZ (tick) : 초당 tick 개수

    jiffies (tick) : 전역변수로, 인터럽트 발생할 때마다 증가(tick의 개수) 인터럽트 발생하면 업데이트 됨.

    date command : $date

     

    Relative time (sec) = jiffies/HZ 

     

    * RTC : OS가 실행 안해도(전원 꺼져도) 절대시간(실제시간) 측정하는 비휘발성 디바이스.

    H/W Clock ($hwclock). xtime이라고 하는 구조체에 저장. 

     

    ex) Timer interrupt

    1. update the jiffies (++해줌)

    2. update the wall time (xtime에 저장됨)

    3. update the proccess time (time slice(quantum), resource usages)


    2. Memory Protection

     - MMU (Memory Management Unit) 

    logical memory addresses를 physical addresses로 변환. (Multiprogrammed batch system에서 Relocation 문제 해결방법)

     

    * page table pointers : page 번호와 실제 프레임과의 순서쌍 (physical)

    * TLB load : 캐시역할


    3. I/O Protection

     - Privileged I/O instructions 

    모든 I/O 명령은 특권 명령 (user의 direct 허용 X)

    user-mode에서 I/O operation을 할 수 있게 하는 절차 (OS procedure) : System Call


    💻 시스템 콜

     - System call

    커널 서비스를 요청하는 수단으로 application이 OS와 소통할 수 있도록 해준다. (ex. I/O operation)

    OS마다 다른 시스템 콜을 가진다 : POSIC API(UNIX, LINUX, Mac OS X), WIN32 API(Windows), JAVA API

     

     - 목적 

    시스템 자원보호 : OS(trusted)와 User Program(untrusted) 구분

    Reliabilty 신뢰성 : buggy user program. 무한 루프, 메모리 소진 같은 버그

    Security 보안성 : malicious user program. 권한 없이 악의적 접근

     

     - Number of system calls 

    Well-defiend (Compact) 200개의 다른 시스템 콜

       - highly portable(휴대성) / robust(방어에 용이)

       - system call보다 wrapping API를 통해 사용자 프로그램 접근

    -> API 사용 이유

       - OS에게 융통성 제공

       - 시스템 콜은 사용하기 쉽지 않아서 라이브러리 사용해서 사용하기 쉽게 함.

       - (ex. write보다 printf씀) wirte : 시스템, function printf : C 함수, C 라이브러리가 유저모드와 커널모드 사이에서 변환, 리턴해준다.

     

     - 과정 예시 

    <유저 프로그램>

    1. 라이브러리에서 system call function을 호출 read()

    2. 인자레지스터에 place하고, user stack에 push

    3. syscall number을 특정 레지스터에 place (eax register)

    4. syscall machine instruction을 실행(int 0x80, syscall)

     

    <커널>

    5. syscall interrupt handler 실행

    6. system call table에 있는 특정 sys_xxx() kernel function 실행

    7. 특정 레지스터에 결과 place

    8. RETURN_FROM_INTERRUPT 실행

     

     - System Call 파라미터 패싱 방법 3가지 

    1. 파라미터를 레지스터에 pass

    2. 파라미터를 메모리의 블럭에 저장하고 레지스터의 파라미터로서 블럭의 주소를 전달

    3. 파라미터가 프로그램에 의해 stack에 push되고 OS에 의해 pop

    * 블럭과 스택 메소드는 전달될 파라미터의 길이나 수의 한계 X

     

     - 인터페이스로서의 System Call 

    각 커널에 들어가기 위한 진입 역할. [ 유저프로그램, 라이브러리, 시스템콜 인터페이스 ]

    순수함수 호출하면 커널 진입 필요 없음.  시스템 라이브러리 함수 사용하면 시스템 콜 -> 커널 또는 직접 시스템 콜 -> 커널

     

     - 종류 

    6개의 카테고리

    1. Process

    2. Scheduling

    3. Interprocess communication

    4. File System

    5. Socket (networking)

    6. and miscellaneous


    💻 프로세스의 Trace

     - 프로세스 스위치(Context Switch) 원인

    Timeout : 프로세스 진행불가 판단, Dispatcher 개입해서 커널 코드 수행 (모드 스위치). 더 수행할 수 있는데 커널에 의해 강제적으로 뺏김

    I/O request : 시스템 콜 -> 커널모드. Timeout과 다르게 CPU가 주어져도 자신이 더 수행할 수 없는상태 (그래서 뺏김)

    Exception : 시스템 콜 -> 커널모드

    System call : -> 커널모드

     

    - 프로세스 스위치 과정

    실행 중지할 프로세스의 정보를 PCB에 업데이트, 메인 메모리에 저장

    앞으로 실행할 프로세스의 정보를 PCB에서 CPU로 불러온다.

    실행(Dispatch) : ready상태의 프로세스를 running으로 바꾸는 것

     

     - Dispatcher

    CPU 스케줄러 내부에 포함된 것.

    CPU의 제어권을 CPU Scheduler에 의해 선택된 프로세스에게 넘긴다

    단기 스케줄러가 선택한 프로세스에 실질적으로 프로세서를 할당하는 역할을 한다.