ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 운영체제 ① (KOCW 반효경 교수님 강의)
    OS 2022. 7. 14. 06:30

     

     

    운영체제를 혼자 학습하려다 보니 한계를 느껴서 검색하다가 블로그에 후기가 많은 KOCW의 반효경 교수님의 2014년도 강의를 듣게 되었다! 

    수업을 들어보니 확실히 홀로 공부하는 것보다 더 깊고 자세하게 배울 수 있던 것 같다. 

    이런 양질의 교육을 온라인으로 그것도 무료로 듣게 되다니 너무 감사하다!

     

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

     

    운영체제

    운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

    www.kocw.net

     

     

    이 글은 반효경 교수님의 강의를 듣고 잊지않고 공부하기 위해 작성되었다. 

     

     

     

     

     

     

    Ch1. Introduction Of OS

    출처 반효경 교수님 KOCW 수업

    • 운영체제 : 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층 
      • 협의의 운영체제 (커널(핵심)): 운영체제의 핵심 부분으로 메모리에 상주 
      • 광의의 운영체제 (넓은의미) : 각종 주변 시스템 유틸리티를 포함한 개념 
    • 목적 
      • 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행 하며 동시 사용자 및 프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상을 제공 (실행중인 프로그램들에게 짧은 시간씩 CPU를 번갈아 할당) 하여 컴퓨터 시스템을 편리하게 사용할 수 있는 환경 제공 
      • 프로세서, 기억장치, 입출력 장치 등의 효율적 관리를 통하여 사용자간의 형평성 있는 자원 분배 및 주어진 자원으로 최대한의 성능을 내도록 컴퓨터 시스템의 자원을 효율적으로 관리 
      • 사용자 및 운영체제 자신을 보호하고 프로세스, 파일, 메세지 등을 관리 
    • 분류 
      • 동시작업 가능 여부 
        • 단일 작업 : 한 번에 하나의 작업만 처리, 설계가 쉬움 
          • MS-DOS 프롬프트 
        • 다중 작업 : 동시에 두 개 이상의 작업 처리, 사용이 편리 (현대식 대부분이 다중 작업)
          • UNIX, MS Windows, 스마트폰+스마트 기기(범사용적 컴퓨터)
      • 사용자의 수 
        • 단일 사용자 : 단일 작업 지원 기계는 단일 사용자 지원 
          • MS-DOS, MS Windows
        • 다중 사용자 : 여러명이 사용 가능(여러계정 + 동시 접근 가능 여부) + 보안기능, 형평성 작업 필요 
          • UNIX, NT server 
      • 처리방식 
        • 일괄처리(Batch processing)
          • 작업 요청을 일정량 모아서 한번에 처리, 작업이 완전 종료될 때 까지 기다려야 함 (현대 X)
          • 초기 Punch Card 처리 시스템, OMR (시간이 오래 걸려서 실수하면 안되기 때문에 작업의 정확도가 중요함)
          • <-> 현대에는 시간이 짧기 때문에 정확도보다 확장성이 중요하다 
        • 시분할(time sharing)
          • 여러 작업 수행시 처리 능력을 일정 시간 단위로 분할하여 사용
          • batch 처리에 비해 짧은 응답시간 (주어진 자원 최대한 활용 + 빠른 서비스 (상황에 따라서 소요시간이 다르다))
          • 현대식 처리 방식 (CPU 번갈아서 지원) -> 사용자는 interactive한 소통 가능 
          • UNIX
        • 실시간 (Realtime OS)
          • 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장(특수시스템에서 목적을 가진 데드라인이 존재)
          • Hard realtime system(경성 실시간 시스템)
            • 엄격한 기준을 가짐(반드시 데드라인이 지켜져야함)
            • 원자로/공장 제어, 미사일 제어 , 반도체 장비, 로보트 제어, 네비게이션, 블랙박스 
          • Soft realtime system(연성 실시간 시스템)
            • 데드라인이 있지만 엄격하지는 않은 시스템
            • 영화화면
    • 컴퓨터에서 여러 작업을 동시에 수행하는 의미를 지닌 용어들  
      • 일반적으로 CPU 1개를 사용  
        • Multitasking : 여러작업 이용시 수행됨 (CPU는 하나이지만 빠르게 전환됨)
        • Multiprogramming : 메모리에 여러 프로그램 올라가는 것을 강조 
        • Time sharing : CPU의 시간 분할을 강조 
      • CPU 여러개 사용(고성능 컴퓨터)
        • Multiprocess : 하나의 컴퓨터에 CPU(proccessor)가 여러개 붙어 있음을 의미 

    출처 반효경 교수님 KOCW 수업

    • 구조 
      • CPU 스케줄링 : ex)빨리 처리하는 것은 먼저 하는 것이 시간적 효율이 높다 
      • 메모리 관리 : 한정적인 메모리를 1/n보다 필요한 대상(ex)여태까지 사용량 보고)에게 나누어준다 (자리가 없으면 누군가는 디스크로 이동)
      • 입출력 관리 : I/O 디바이스는 장치가 느리며 interrupt로 실행됨
      • 파일 관리(디스크(보조 기억 장치)) : 디스크 head가 움직이며 일기 때문에 head의 움직임을 최소화 하는 것이 속도의 관건이므로 요청 순서보다는 엘레베이터처럼 head에 가까이 위치한 요청을 먼저 처리하여 속도를 높이는 것이 좋다. 

     

     

     

    Ch2. System Structure & Program Execution

    출처 반효경 교수님 KOCW 수업

    • CPU 
      • 메모리에서 instruction 읽어서 실행 (I/O 디바이스에 직접 접근 X)
      • 요청읽어오라고 디스크의 I/O controller에게 시킨다
    • interrupt line 
      • 요청 처리 
    • mode bit 
      • 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않기 위한 보호장치 
      • 운영체제(모니터(커널, 시스템) 모드 : 0 -> OS 코드 수행(무슨일이든 가능)) 및 사용자 프로그램(사용자 모드 : 1 -> 사용자 프로그램 수행(제한된 작업))을 구분 
      • 특권 명령 : 보안을 해칠 수 있는 중요 명령어(모니터 모드에서만 수행 가능)
      • Interrupt 나 Exception 발생 시 하드웨어가 mode bit를 0으로 바꿈 
      • 사용자 프로그램에게 CPU 넘기기 전에 mode bit 1로 세팅 
    • DMA controller 
      • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용 
      • I/O 장치가 너무 많은 인터럽트를 발생하지 않게 CPU는 자기일을 하는 동안 DMA가 담아서 기다렸다가 메모리로 옯기는 작업까지 대신 처리해줌 -> 인터럽트 감소 -> 빠른 작업 가능 
      • 직접 메모리 접근 (CPU 개입 없이 I/O 디바이스(입출력장치)와 주기억장치(메모리)와의 데이터 직접 전송이 가능)
      • device controller가 장치의 buffer storage 내용을 메모리에 block 단위로 직접 전송 (바이트 단위 X, block 단위로 인터럽트 발생)
    • Memory controller
      • DMA와 CPU가 동시에 메모리 접근해서 문제가 발생하지 않도록 관리 
    • timer 
      • 정해진 시간이 흐른 뒤 운영체제에게 제어권 넘어가도록 interrupt 발생 -> 독점 방지 
      • 매 클럭 틱 때마다 1씩 감소 (타이머 값이 0이 되면 인터럽트 발생)
      • 특정 프로그램이 CPU독점 -> 타이머 작동 -> 다른 작업 처리 (끝내지 못한 부분은 타이머 끝나면 interrupt line에 남겨진 잔여 작업 처리)
      • 만약 무한루프 작업이 CPU를 가지게 되면 다음 작업을 하지 못하게 되므로 time sharing이 필요 ( 타이머가 구현 )
      • 현재시간을 계산하기 위해서도 사용됨 
    • 사용자 프로그램 
      • 직접 I/O 장치 접근 X
      • 보안 등의 이유로 운영체제에게 넘겨주어야 한다. 
    • device controller 
      • 각 장치를 통제하는 작은 CPU 역할 (해당 I/O 장치 유형을 관리) -> hardware
      • 제어 정보를 위해 control register(명령 저장), status register, local buffer(일종의 data register: 데이터 저장)를 가짐
      • I/O가 끝났을 때 인터럽트로 CPU에게 그 사실을 알림 
      • cf) device driver : 장치 구동기로 OS 코드 중 각 장치별 처리루틴(인터페이스에 맞게 설치) -> software
    • local buffer 
      • 작업 공간 
       

    출처 반효경 교수님 KOCW 수업
    출처 반효경 교수님 KOCW 수업

    • 인터럽트 
      • 인터럽트 당한 시점의 레지스터와 프로그램 카운터를 저장하고 CPU의 제어를 인터럽트 처리 루틴에 넘김
      • Interrupt(하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트 
      • Trap(소프트웨어 인터럽트) 
        • Exception : 프로그램이 오류를 범한 경우 OS로 제어권 넘어오면 프로그램 종료등의 처리
        • System call : 프로그램이 커널 함수를 호출하는 경우 
      • 인터럽트 벡터 
        • 해당 인터럽트의 처리 루틴 주소(어떤 함수를 실행시킬지 함수 위치)보유
      • 인터럽트 처리 루틴 (인터럽트 핸들러)
        • 해당 인터럽트를 처리하는 커널 함수 
      • Trap발생 (시스템콜) -> 커널 모드 요청 처리 -> CPU에게 하드웨어 인터럽트 (작업끝남을 알림) -> CPU는 다음 요청 처리 
       

    출처 반효경 교수님 KOCW 수업

    • 동기식 입출력(Synchronous I/O)
      • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감 
      • 1) 매시점 하나의 I/O만 일어나는 경우 -> I/O 끝날 때 까지 CPU 낭비, 기다려야함
      • 2) I/O 처리가 끝날때가지 해당 프로그램에게서 CPU를 빼앗고 다른 프로그램에게 줌 -> I/O 처리 기다리는 줄에 그 프로그램 세움 (I/O, CPU 모두 사용됨)
    • 비동기식 입출력(Asynchronous I/O)
      • I/O 요청 후 입출력 기다리지 않고 제어가 사용자 프로그램에게 바로 넘어감 
    • 두 경우 모두 I/O완료는 인터럽트로 CPU에게 알려줌 

    출처 반효경 교수님 KOCW 수업
    출처 반효경 교수님 KOCW 수업
    출처 반효경 교수님 KOCW 수업

    • Virtual memory : 프로그램 마다 독자적 
    • Physical memory : 당장 필요한 부분(아닌 부분은 DIsk에), 종료되면 사라짐 
    • Swap area : 메인 메모리의 연장선으로 전원이 나가면(프로세스 종료되면) 사라진다 (휘발성)
    • File system : 전원이 나가도 유지(비휘발성)
    • 프로그램의 실행이란 user와 kernel을 반복하며 요청을 처리하는 것을 말한다 

     

    Ch3. Process

    출처 반효경 교수님 KOCW 수업
    출처 반효경 교수님 KOCW 수업
    출처 반효경 교수님 KOCW 수업
    출처 반효경 교수님 KOCW 수업
    출처 반효경 교수님 KOCW 수업 (PCB)

    • 문맥 : 어디까지 실행했으며 어떤 내용을 담아두고 어떤 레지스트까지 실행했는가  
      • CPU 수행 상태를 나타내는 하드웨어 문맥 
        • Program Counter
        • 각종 register
      • 프로세스의 주소 공간 (메모리와 관련) 
        • code, data, stack
      • 프로세스 관련 커널 자료 구조 (관리역할)
        • PCB(Process Control Block) : 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보 
          • OS가 관리상 사용하는 정보 
            • Process state, Process ID, scheduling information, priority
          • CPU 수행 관련 하드웨어 값 
            • Program Counter, registers
          • 메모리 관련 
            • Code, data, stack의 위치 정보 
          • 파일 관련 
            • Open file descriptors 
        • Kernel stack(각 프로세스가 실행하다가 system call -> 커널 -> 함수호출 -> 기록)
    • 상태 
      • Running : CPU 잡고 Instruction을 수행중인 상태 (CPU당 한개 ) 
      • Ready : 메모리 등 다른 조건을 만족하며 CPU를 기다리는 상태
      • Blocked(wait, sleep) : CPU를 주어도 당장 Instruction을 수행할 수 없는 상태, Process 자신이 요청한 event(ex)I/O)가 즉시 만족되지 않아 이를 기다리는 상태 (ex)디스크에서 파일을 읽어와야 하는 경우 또는 디스크가 내려가있는 상태) -> 자신이 요청한 event 만족되면 ready 
      • Suspended(stopped) : 외부적인 이유로 프로세스의 수행이 정지된 상태 (ex)중기 스케줄러), 프로세스는 통째로 디스크로 swap out 됨 (ex)사용자가 프로그램을 일시 정지 시킴(break key), 시스템이 여러 이유로 프로세스를 잠시 중단(메모리에 너무 많은 프로세스가 올라와 있을 때)) -> 외부에서 resume 해주어야 active됨
      • New : 프로세스가 생성중인 상태 
      • Terminated : 수행(execution)이 끝난 상태 (정리하고 있는 단계)

    출처 https://stackoverflow.com/questions/17228441/context-switch-questions-what-part-of-the-os-is-involved-in-managing-the-contex

    • Context Switch (문맥 교환)
      • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
      • CPU가 다른 프로세스에게 넘어갈 때 
        • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
        • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴 
      • System call이나 interrupt발생시 반드시 context switch가 일어나는 것은 아니다 
        • CPU 넘어가야 문맥교환이 발생 (ex)CPU 프로세스 변경 요청 timer interrupt 또는 I/O 요청 system call)
        • 문맥교환이 없는 system call 또는 interrupt 발생 시에도 CPU 수행 정보등 context 일부를 PCB에 저장해야 하지만 문맥교환을 하는 경우에는 그 부담이 훨씬 커 오버헤드가 크다(ex) 프로세스 넘길때 일어나는 cache memory flush)

     

    출처 반효경 교수님 KOCW 수업 (PCB)

    • 프로세스를 스케줄링 하기 위한 큐 
      • Job queue : 현재 시스템 내에 있는 모든 프로세스의 집합 
      • Ready queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합 
      • Device queues : I/O 장비의 처리를 기다리는 프로세스의 집합 
      • ex) Ready Queue에 있으면 Device Queue에 없다 (프로세스들은 각 큐를 오가며 수행)
    • 스케줄러 
      • Long-term scheduler : 장기 스케줄러 (job scheduler)
        • 시작 프로세스 중 어떤 것을 ready queue로 보낼 지 결정 
        • 프로세스에 memory(및 각종 자원)을 주는 문제 
        • Degree of Multiprogramming (메모리에 여러 프로개름 올라가있고 몇개인지 -> 너무 적거나 많으면 성능 떨어짐(메모리 프로그램이 하나면 마치고 나서 기다려야함)) 제어 
        • time sharing system에는 보통 장기 스케줄러가 없음(무조건 ready) -> 중기 스케줄러가 대신함
      • Short-term scheduler : 단기 스케줄러 (CPU scheduler)
        • 어떤 프로세스를 다음번에 running 시킬 지 결정 
        • 프로세스에 CPU를 주는 문제 
        • 충분히 빨라야 함(millisecond 단위)
      • Medium-term scheduler : 중기 스케줄러 (Swapper)
        • 여유공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄 
        • 프로세스에게서 memory를 빼앗는 문제 
        • Degree of Multiprogramming을 제어 

    출처 반효경 교수님 KOCW 수업 (PCB)
    출처 반효경 교수님 KOCW 수업 (PCB)

    • 쓰레드 
      • 구성 
        • CPU 관련 정보 (수 words, thread, lightweight)  < PCB 전체는 process, heavy weight 
          • program counter 
          • register set 
        • stack space
      • 다른 쓰레드와 공유하는 부분 
        • code
        • data
        • OS resources
      • 다중 쓰레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked(wait)상태인 동안에도 동일한 태스크 내의 다른 쓰레드가 실행(running)되어 빠른 처리가 가능
      • 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있음
      • 스레드(빠른 응답성)을 사용하면 CPU가 여러개 달린 컴퓨터에서 병렬성을 높일 수 있다 
      • 스레드 사용의 장점 
        • 응답성 : 하나의 스레드가 blocked 되더라도 다른 쓰레드가 계속 된다 (ex) 웹사이트에서 이미지를 가진 html 요청시 싱글스레드의 경우 이미지 받아로 때까지 block되어 기다려야 하지만 멀티 스레드의 경우 이미지 받아오는 쓰레드의 일을 기다리지 않고 html을 먼저 보여줌 -> 비동기식 입출력)
        • 자원 공유 (효율성 증가) : 프로세스의 code, data, resources 공유
        • 경제성 : 쓰레드 간의 문맥교환이 프로세스 문맥교환 보다 경제적
        • Multi Processor 구조의 활용 : CPU여러개 일때 병렬성 증대 
      • 스레드 구현 
        • Kernel Threads: CPU 스케줄링 하듯이 넘겨줌 
        • library Threads: 운영체제는 프로세스 스레드 여러개인 것 모르고 유저 프로그램이 바인딩(구현상 제약이 있음)
        • real-time Threads

     

    Ch4. Process Management
    • 생성 
      • 부모 프로세스가 자식 프로세스를 복제하여 생성 (자식은 부모의 주소공간을 복사 & 자식은 그 공간에 새로운 프로그램을 올림)
      • 프로세스의 트리(계층구조) 형성 
      • 프로세스는 자원을 필요로 함
        • 1) 운영체제로 부터 받는다 
        • 2) 부모와 공유한다 (공유하는 모델을 경쟁한다) -> 리눅스 등의 OS는 효율을 위해 공유할 수 있는 것은 공유하다가 Copy On Write(COW : 부모것을 공유하다가 write 오면 그때 부모의 code, data, stack을 복제)
          • 모든 자원 공유 모델 
          • 일부 자원 공유 모델
          • 공유하지 않는 모델 
      • ex) UNIX
        • fork() 운영체제에게 요청한 시스템 콜이 새로운 프로세스를 생성 
          • 부모를 그대로 복사( OS data except PID + binary)
          • 주소 공간 할당 
        • exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림 
    • 수행 
      • 부모와 자식은 공존하면서 수행되는 모델 
      • 자식이 종료 될 때까지 부모가 기다리는 (wait) 모델 
        • 프로세스 A가 자식 생성 후 wait() 시스템 콜을 호출하면 커널은 자식이 종료될 때까지 프로세스 A를 sleep 시켜 block 상태로 만든다 
        • 자식 프로세스가 종료되면 커널은 프로세스 A를 깨워 ready 상태로 만든다 
    • 종료
      • 자발적 종료 
        • 마지막 statement 수행 후 exit() 시스템 콜 호출 또는 명시적 exit() 사용 (명시하지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어준다) 
        • exit() : 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌 
          • 자식이 부모에게 output data를 보냄 (via wait)
          • 프로세스의 각종 자원들이 운영체제에게 반납됨
      • 비자발적 종료 
        • 부모 프로세스가 자식 프로세스를 강제 종료시키는 경우 또는 부모가 종료하는 경우  
          •  abort() : 부모 프로세스가 자식의 수행을 종료시킴  
            • 자식이 할당 자원의 한계치를 넘어설 때 
            • 자식에게 할당된 태스크가 더이상 필요하지 않을 때 
            • 부모가 종료될 때 (exit)
              • 자식 -> 부모 순으로 단계적인 종료가 이루어짐 
        • 키보드로 kill, break 등을 친 경우 

    출처 반효경 교수님 KOCW 수업 (PCB)

    • 프로세스간 협력 
      • 독립적 프로세스 
        • 프로세스가 각자의 주소공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못한다 
      • 협력 프로세스 
        • 프로세스 협력 매커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있다 
          • Message passing : 메세지를 전달하는 방법 
            • 커널을 통해 메세지 전달 (독립적 주소공간으로 직접 전달은 불가)
            • Message system : 프로세스 사이에 공유변수(shared variable)를 일체 사용하지 않고 통신 
            • Direct Communication : 통신하려고 하는 프로세스의 이름을 명시적으로 표시
            • Indirect Communication : mailbox 또는 port를 통해서 메시지를 간접 전달 
          • shared memory : 주소 공간을 공유하는 방법 
            • 서로 다른 프로세스 간에도 일부 주소 공간을 공유할 수 있는 메커니즘 
            • Thread는 사실상 하나의 프로세스이므로 프로세스간 협력으로 보기는 어렵지만 동일한 process를 구성하는 thread간에는 주소공간을 공유하므로 협력이 가능하다 

     

     

     

     

     

     

Designed by Tistory.