인생은 고통의 연속

운영체제 구조 본문

프로그래밍/OS

운영체제 구조

gnidoc 2019. 1. 21. 17:47
    반응형

    유저/커널 모드(user/kernel mode)

    • 부팅 후, 인터럽트, 시스템콜, exception이 발생하면 커널 모드로 전환한다. 즉, 커널모드는 모든 시스템 메모리와 모든 CPU 인스트럭션에 접근이 허가된 프로세서의 실행 모드를 말한다. 
    • 유저모드는 유저가 접근할 수 있는 영역을 제한적으로 두고 시스템 리소스에 함부로 침범하지 못하는 모드


    시스템콜(system call) vs 인터럽트(interrupt)

    • 시스템콜 : OS의 커널이 제공하는 서비스에 대해 응용프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스
      • 기능
        • 사용자 모드에 있는 응용 프로그램이 커널의 기능을 사용할 수 있도록 한다.
        • 시스템 호출을 하면 사용자 모드에서 커널 모드로 바뀐다.
        • 커널에서 시스템 호출을 처리하면 커널 모드에서 사용자 모드로 돌아가 작업을 계속한다.
      • 종류
        • 프로세서 제어(process Control)
        • 파일 조작(file manipulation)
        • 장치 관리(Device Management)
        • 정보 유지(Information maintenance)
        • 통신(Communication)
    • 인터럽트 : 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우에 cpu에 알려 처리할 수 있도록 하는 것을 말한다


    Memory mapped IO

    CPU가 입출력 장치를 액세스할 때, 입출력과 메모리의 주소 공간을 분리하지 않고 하나의 메모리 공간에 취급하여 배치하는 방식이다.

    그래서 높은 레벨의 언어에서 사용하기 편해지지만, 잘못하면 유저모드에서 커널모드의 권한을 가져다 쓸 수 있는데 이를 OS는 방지해야된다.(protection mechanism - IO, memory, cpu)



    Memory Protection

    유저의 프로그램이 메모리를 적당히 사용하고 다른 프로그램에 접근하지 못하도록 하는게 목표이다.

    이를 위해서 가상 주소(virtual address)와 같은 간접 접근 방식이나 주소의 범위를 지정해서 사용한다.(base register, limit register)



    Protection of I/O Devices

    일부 특별한 I/O 명령어나 controller registers은 오직 커널 모드에서 사용되어야 한다.

    • device driver는 I/O interrupt handler를 커널 모드에서 무조건 사용해야한다.
    • 유저 프로그램은 IO를 수행할때 OS(system calls)을 통해서 요청해야한다.


    CPU Protection

    유저 프로그램은 cpu를 항상 잡아둘 수 없다. OS kernel은 timer를 관리하는데, timer는 일정 기간 후에 인터럽트를 발생시킨다.


    프로세스 주소 공간

    프로세스는 크게 code, data, heap, stack으로 이뤄진다.

    code : 프로그램 코드(main, procedure_A...)

    data : 전역변수, static 변수(int b)

    heap : 동적인 메모리(main의 int *a가 가리키고 있는 값)

    stack : 지역 변수(procedure_A의 int a나 main의 int *a)



    private 주소 공간

    각 프로세스는 private한 주소 공간을 가진다.



    유저모드에서 프로세스의 주소 공간

    • text : program code
    • code : 초기화된 global, static variables(실행전 크기를 알 수 있는 데이터)
    • BSS(block started by symbol) : 초기화가 안된 global, static variables
    • heap : dynamic memory
    • stack : 지역변수나 함수 호출을 위한 것(1급 객체, 포인터 등등)



    Context Switching

    멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업



    스케줄링(Scheduling)

    실행 중인 모든 프로세스들에게 골고루 cpu를 할당하는 일


    단일 프로세스에서의 프로세싱

    가장 높은 우선 순위의 프로세스를 선택함. 하지만 계속 높은 우선 순위의 프로세스가 생성되면 낮은 우선 순위의 프로세스는 계속 cpu를 할당 받지 못해 기아(starvation) 발생


    단일 프로세스 결정모드 

    • 비선점(Non-preemptive) : 프로세스가 일단 실행 상태에 진입하면 자발적으로 cpu를 놓을때까지 cpu를 빼앗기지 않는다.
    • 선점(Preemptive) : 실행 중인 프로세스라도 운영체제에 의해 인터럽트가 걸려 비자발적으로 준비 큐로 이동된다.(cpu를 빼앗을 수 있다.)


    반응형

    '프로그래밍 > OS' 카테고리의 다른 글

    동기화 원칙(임계영역, 뮤텍스, 세마포어)  (0) 2019.01.28
    프로세스간 커뮤니케이션과 쓰레드  (0) 2019.01.21
    운영체제란?  (0) 2019.01.21
    Comments