ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (1) 운영체제란 무엇인가, (2) 시스템 구조와 프로그램 실행, (3) 프로세스
    운영체제 2024. 10. 30. 23:50

    참고: 이화여대 반효경 교수님 운영체제 강의 

    http://www.kocw.net/home/search/kemView.do?kemId=1046323

     

    운영체제란

    컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층

     

    좁은 의미의 운영체제(커널): 운영체제의 핵심 부분으로 메모리에 상주하는 부분

    넓은 의미의 운영체제: 커널뿐 아니라 각종 주변 시스템 유틸리티를 포함한 개념

     

    운영체제의 목적은 컴퓨터 시스템의 자원을 효율적으로 관리하고, 사용자가 편리하게 사용할 수 있도록 하는 것

     

    Multitasking = Multiprogramming = Time sharing = Multiprocess

     

    시스템 콜

    - 사용자 프로그램이 운영체제에게 입출력(I/O) 요청

     

    인터럽트

    - 인터럽트당한 시점의 레지스터와 program counter를 저장한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다

     

    넓은 의미에서의 인터럽트

    Interrupt: 하드웨어가 발생시킨 인터럽트

    Trap: 소프트웨어가 발생시킨 인터럽트 

    ① Exception: 프로그램이 오류를 범한 경우

    ② System Call: 프로그램이 운영체제 커널 함수를 호출하는 경우

     

    인터럽트 벡터: 해당 인터럽트의 처리 루틴 주소를 가지고 있음

    인터럽트 처리 루틴(=인터럽트 핸들러): 해당 인터럽트를 처리하는 커널 함수

     

    동기식 입출력 Synchronous I/O

    - 입출력 요청 후 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감

     

    비동기식 입출력 Asynchronous I/O

    - 입출력이 시작된 후 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

     

    두 경우 모두 입출력 작업의 완료는 인터럽트로 알려줌

     

    DMA (Direct Memory Access)

    CPU의 중재 없이 디바이스 컨트롤러가 디바이스의 Buffer Storage의 내용을 메모리에 블럭 단위로 직접 전송

    바이트 단위가 아니라 블럭 단위로 인터럽트를 발생시킴

     

    저장장치 계층 구조

     

    위 High Speed, High Cost, 휘발성

    CPU가 직접 접근해 실행 가능함

     

    아래 Low Speed, Low Cost, 비휘발성

    하드 디스크의 경우는 Unexecutable함

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    커널 주소 공간의 내용

     

    [커널 코드]

     

    [커널 스택]

    커널 또한 소프트웨어이기 때문에 스택을 사용함

     

    [PCB]

    프로세스마다 각각의 PCB가 할당됨

     

     

     

     

     

    "프로세스는 실행 중인 프로그램이다"

     

    프로세스의 문맥(context)

    - CPU가 어디까지 수행했는지, 수행 상태를 나타내는 하드웨어 문맥 -> Program Counter가 어디를 가리키는지, 각종 register가 무슨 값을 가지고 있었는지

    - 프로세스의 주소 공간 -> code, data, stack에 뭐가 들어 있는지

    - 프로세스 관련 커널 자료 구조 -> PCB, 커널 스택

     

    PCB(Process Control Block): 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보

    (1) OS가 관리상 사용하는 정보 - 프로세스 상태, 프로세스 ID, 스케줄링 정보, 우선순위

    (2) CPU 수행 관련 하드웨어 값 - Program counter(현재 메모리의 어느 부분을 실행하고 있는지 가리킴), 레지스터

    (3) 메모리 관련 - Code, date, stack의 위치 정보

    (4) 파일 관련 - 오픈하고 있는 파일 정보 등

     

    프로세스의 상태 Process State

     

    Running: CPU를 잡고 instruction을 수행 중인 상태

    Ready: CPU를 기다리는 상태(메모리 등, CPU를 제외한 다른 조건을 모두 만족하고) -> Ready Queue 대기 중

    Blocked(=wait, sleep): CPU를 주어도 당장 instruction을 수행할 수 없는 상태

    ex) 프로세스 자신이 요청한 event(예: 입출력)가 즉시 만족되지 않아 이를 기다림, 디스크에서 파일을 읽어와야 하는 경우

    New: 프로세스가 생성 중인 상태

    Terminated: 수행이 끝난 상태

    Suspended(=stopped): 외부적인 이유(Meidium-term schedular)의 이유로 프로세스의 수행이 정지된 상태

    - 프로세스는 통째로 디스크에 swap out된다

    ex) 사용자가 프로그램을 일시 정지시킨 경우 (break key), 시스템이 프로세스를 잠시 중단시킴

     

    Blocked과 Suspended의 차이

    Blocked: 자신이 요청한 이벤트가 만족되면 Ready

    Suspended: 외부에서 재개를 시켜 주어야 Ready

     

    문맥 교환 Context Switch: CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

    - CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행함

    ① CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장

    ② CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어 옴

     

    단순히 유저 모드에서 시스템 콜이나 인터럽트를 통해 커널 모드로 전환한 것은 문맥 교환이 아님.

    timer interrupt나 입출력 관련 시스템 콜 발생 시, CPU가 다른 프로세스 B로 넘어간 경우 문맥 교환이 일어나며 오버헤드가 큼.

     

    Job Queue: 현재 시스템 내에 있는 모든 프로세스의 집합

    Ready Queue: 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합

    Device Queue: 입출력 장치의 처리를 기다리는 프로세스의 집합

     

    스케줄러 Schedular

    Long-term scheduler (=job scheduler)

    - 시작 프로세스(new process) 중 어떤 것들을 ready queue로 보낼지 결정

    - 프로세스에 메모리(및 각종 자원)을 주는 문제 

    - 보통 그냥 ready 상태로 보냄

     

    Short-term scheduler (=CPU scheduler)

    - 어떤 프로세스를 다음번에 running시킬지 결정

     

    Medium-term scheduler (=Swapper)

    - 너무 많은 프로세스가 메모리에 올라와 있으면(ready queue), 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄

    - 프로세스에게서 메모리를 뺏는 문제

     

     

    쓰레드 Thread: CPU 프로세스 내에서 독립적으로 실행될 수 있는 최소 실행 단위

     

    프로세스의 주소공간은 하나만 띄워놓고, Program counter(프로그램 수행 단위)만 여러 개 두고 있음

    프로세스는 함수를 호출하고, 값을 리턴하는 정보를 주소공간의 Stack에 쌓음 

    CPU 수행 단위가 여러 개 있으면(다중 쓰레드) Stack을 여러 개 만들어야 함

    쓰레드별로 Program Counter, 레지스터, Stack을 가지고 있음

     

     

    쓰레드의 구성: program counter, 레지스터, Stack 공간

    쓰레드는 동료 쓰레드와 code, data, OS 자원을 공유한다

     

    하나의 스레드가 blocked(=waiting) 상태인 동안에도, 동일한 태스크 내의 다른 쓰레드가 실행(running)되어 빠른 처리를 할 수 있다.

    동일한 일을 수행하는 다중 쓰레드를 병렬 사용하여 높은 처리율과 성능 향상을 도모할 수 있다.

    만약 다중 쓰레드가 아니면 모든 프로세스가 동일한 일을 함에도 메모리 공간에 올라가 있어 자원을 낭비함.

     

    장점

    1. 응답성: 하나의 쓰레드가 Blocked일 때, 다른 쓰레드는 계속될 수 있음 (ex. 웹페이지 html과 이미지의 쓰레드 독립성)

    2. 자원 공유: n개의 쓰레드는 코드, 데이터, 프로세스의 자원을 공유함

    3. 경제성: 프로세스를 만드는 건 오버헤드가 큰데, 쓰레드를 추가하는 건 그것보다 덜함. 문맥 교환도 마찬가지임. (Solaris 운영체제의 경우, 위 두 가지 오버헤드가 각각 30배와 5배 차이)

    4. 멀티 CPU 아키텍처의 활용성: 각 쓰레드는 다른 CPU(프로세서)에서 병렬로 작동함

Designed by Tistory.