메모리 관리
  • 주기억장치는 운영체제(상주 모니터, 커널)를 위한 곳과, 현재 수행중인 프로그램을 위한 공간으로 구분된다.
  • 멀티프로그래밍 시스템에서는 주기억장치의 사용자 영역이 다수의 프로세스들을 수용하기 위해 더 여러개로 나뉘게 된다. 이와 같은 분할 작업은 운영 체제에 의해서 동적으로 이루어지며, 이를 메모리 관리라고 한다.


메모리 관리 관련 용어
  • 프레임 (Frame) : 주기억장치의 고정 길이 블록
  • 페이지 (Page) : 보조기억장치에 있는 데이터의 고정 길이 블록. 한 페이지의 데이터는 한 프레임의 주기억장치에 임시로 복사될 수 있다.
  • 세그먼트 (Segment) : 보조기억장치에 있는 데이터의 가변 길이 블록. 전체 세그먼트는 주기억장치의 사용 가능한 공간에 임시로 복사될 수 있거나 (세그먼테이션), 주기억장치로 일일이 복사될 수 있는 페이지들로 분할 될 수 있다. (세그먼테이션과 페이징의 결합)




메모리 관리기법 종류
  • 반입 정책(전략)
        - 언제 메모리로 적재할 것인지 결정하는 전략
        - 메인메모리에 적재할 다음 프로세스의 반입시기를 결정
        - 기법 : 요구반입기법, 예상반입기법

  • 배치 정책(전략)
        - 어디로 위치시킬 것인지 결정하는 전략
        - 디스크에서 반입한 프로세스를 메인 메모리의 어느 위치에 저장할 것인지를 결정하는 방법
        - 기법 : 최초적합(first-fit), 최적적합(best-fit), 최악적합(worst-fit), 순환적합(next-fit)
        - 최초적합: 메모리의 처음부터 검사해서 크기가 충분한 첫 번째 사용 가능한 메모리 블록을 선택한다.
        - 최적적합: 요청한 크기와 가장 근접한 크기의 메모리를 선택한다. 가용 공간들에 대한 목록이 그 공간들의 크기 순서대로 정렬되어 있지 않다면 최적인 곳을 찾기 위해 전체를 검색해야 한다.
        - 최악적합: 사용 가능한 공간들 중에서 가장 큰 것을 선택한다. 할당해주고 남는 공간을 크게하여 다른 프로세스들이 그 공간을 사용할 수 있도록 하는 전략. 최적 적합과 마찬가지로, 가용 공간들에 대한 목록이 그 공간들의 크기 순서대로 정렬되어 있지 않다면 최적인 곳을 찾기 위해 전체를 검색해야 한다.
        - 순환적합: 가장 최근에 배치되었던 메모리의 위치에서부터 검사를 시작해 크기가 충분한 다음 위치의 사용 가능한 메모리 블록을 선택한다.

  • ​교체 정책
        - 메모리의 어느 영역을 교체하여 사용할 것인지 결정하는 전략
        - 재배치 기법으로 메인 메모리에 있는 어떤 프로세스를 제거할 것인가를 결정
        - 기법: 프로세스 Swap In/Out



연속 메모리 할당 방식

  • 연속 메모리 할당
        - 메모리의 영역을 사용자를 위한 공간과 운영체제 상주를 위한 공간으로 구분하는 기법
        - 메모리를 운영체제 루틴이 들어있는 부분(모니터)과 사용자 프로그램이 들어있는 부분, 사용되지 않는 부분으로 구분
        - 사용자가 모든 메인 메모리에 대한 제어권을 가짐
        - 사용자 프로그램이 주소를 잘못 지정하면 운영체제 파괴
        - 운영체제 파괴 방지를 위한 프로세서 내 경계 레지스터를 둠
        - 사용자 프로그램이 메모리 참조할 때마다 경계 레지스터 검사 이후 실행

  • 고정 분할
        - 메모리를 여러 개의 고정된 크기로 분할. (partition)
        - 고정된 크기의 분할 영역에 프로세스가 각각 할당됨.
        - 물리주소는 분할 기준 레지스터(PBR) 값에 논리 주소를 더하여 생성됨
        - 강점 : 구현이 간단하다 = 운영체제에 오버헤드가 거의 없다.
        - 약점 : 내부단편화로 인한 비효율적인 사용. 최대 활성 프로세스의 수가 고정됨
           


  • 가변 분할(동적 분할)
        - 메인메모리의 사용자 공간 전체를 하나의 분할 영역으로 설정하고, 이후 프로세스의 움직임에 따라 분할 형태를 동적으로 변화시키는 기법
        - 강점 : 내부단편화가 없고, 주기억장치를 보다 효율적으로 사용할 수 있다.
        - 약점 : 외부 단편화를 해결하기 위한 메모리 집약(Compaction)이 요구된다. 따라서 처리기 효율이 나빠진다. (오버헤드 발생)




 분산 메모리 할당 방식
  • 페이징 기법
        - 동일 크기의 프레임 분할.
        - 페이지라고 불리는 프로세스 영역들이 프레임(페이지 프레임)이라고 불리는 고정크기 블록의 메모리 영역에 할당.
            => 즉, 주기억장치를 고정 사이즈 파티션으로 나누고 각 프로세스 또한 같은 크기의 고정 조각으로 나눈다!
        - 내부 단편화 발생, 외부 단편화 없음
        - 각 페이지를 연속된 공간에 넣을 필요가 없지만, 프로세스의 각 페이지들에 해당하는 프레임의 위치를 저장하기 위해 운영체제는 각 프로세스마다 하나의 페이지 테이블(page table)을 유지한다.
        - 페이지 테이블 : 논리메모리 페이지 번호와 물리메모리 프레임 번호를 매핑.


  • 세그먼트 기법(세그먼테이션)
        - 분할되는 프로그램 블록들을 세그먼트라 하며, 각 세그먼트들의 크기는 서로 다르게 되어 있다.
        - 크기가 다르기 때문에 주기억장치 영역을 페이징 시스템에서와 같이 미리 분할해 둘 수 없으며, 주기억장치에 적재될 때 빈 공간을 찾아 할당하는 방법.
        - 단점 : 프로그래머가 세그먼트의 최대 크기를 알고 있어야한다.
                    논리주소와 물리주소 간에 복잡한 관계가 존재한다.
                    외부 단편화 문제 발생.
        - 동적 할당과 차이점은 세그먼테이션의 경우 프로그램이 하나 이상의 파티션을 차지할 수 있고, 이 파티션들이 연속적일 필요는 없다는 점.



CPU Scheduling
  • Process 작업수행을 위해 언제, 어느 Process에 CPU를 할당할 것인지를 결정하는 작업.




CPU Scheduling 요건 (Scheduling Criteria)
  • 처리 능력(Throughput) 최대화 : 주어진 시간에 최대한 많은 작업을 처리
  • 반환시간(Turnaround time) 최소화 : 프로세스가 시스템으로 진입한 후부터 종료할 때까지 걸린 시간의 최소화
  • 대기시간(Waiting time) 최소화 : Ready queue에서 기다리는 시간 최소화
  • 응답시간(Response time) 최소화 : 대화형 프로세스가 시스템에 요구를 한 후 이에 대한 시스템으로부터의 첫 번째 응답이 올 때까지의 시간의 최소화
  • CPU 이용률(Utilization) 극대화





Process 상태전이도와 Scheduler의 종류 및 역할

  • 프로세스 상태 전이도
    
    <출처 : ilifo >

  • 스케줄러의 종류 및 역할
        - 장기(Job) Scheduler : 프로세스 선택, 주기억장치 할당 (보류-준비)
        - 중기(Process) Scheduler : 프로세스 수에 따라 디스크에 보냄(대기-보류) , 프로세스들이 CPU를 서로 차지하려고 할 때 프로세스를 기억장소(main memory)에서 잠시 빼내고 다시 메인 메모리에 들여보내 실행시킬 수 있는 교체(Swapping) 기법을 사용한다.
        - 단기 Scheduler : 실행 준비된 프로세스에 CPU 할당 (준비-실행)





CPU Scheduling 기법
  • 선점(Preemptive) 스케줄링 
        - 개념 : 어떤 프로세스가 CPU를 할당 받아 실행 중에 있어도 다른 프로세스가 실행 중인 프로세스를 중지시키고 CPU를 강제로 점유할 수 있다.  (우선순위에 따라 CPU를 빼앗을 수 있다.)
                    높은 우선순위를 가진 프로세스들이 빠른 처리를 요구하는 시스템에서 유리
        - 장점 : 비교적 빠른 응답
                   대화식 시분할 시스템에 적합
        - 단점 : 높은 우선순위 프로세스들이 들어오는 경우 오버헤드 초래

  • 비선점(Non-Preemptive) 스케줄링
        - 어떤 프로세스가 CPU를 할당 받으면 그 프로세스가 종료되거나 입출력 요구가 발생하여 자발적으로 중지될 때까지 계속 실행되도록 보장한다. (CPU를 빼앗지 못한다.)
        - 일괄처리 시스템에 적합.
        - 장점 : 응답시간 예상이 용이
                   모든 프로세스에 대한 요구를 공정하게 처리
                   스케줄러 호출 빈도가 낮고 Context switching에 의한오버헤드가 적다.
        - 단점 : CPU 사용 시간이 긴 하나의 프로세스가 CPU 사용 시간이 짧은 여러 프로세스를 오랫동안 대기시킬 수 있으므로, 처리율이 떨어질 수 있다.







비선점(Non-Preemptive) 스케줄링 알고리즘
  • FCFS(First-Come-First-Served)=FIFO(First-In-First-Out)
        - 프로세스가 대기큐(준비큐)에 도착한 순서대로 CPU 할당하는 스케줄링 알고리즘.
        - Convoy Effect 발생 가능 (Burst time이 긴 프로세스가 CPU 독점)
        - 단독적 사용이 거의 없으며, 다른 스케줄링 알고리즘에 보조적으로 사용 (우선순위 스케줄링, RR 스케줄링 등)

  • SJF (Shortest Job First)
        - 준비 큐 내의 프로세스 중 CPU 점유시간이 가장 짧은 프로세스에 CPU를 먼저 할당하는 스케줄링 알고리즘.
        - 주어진 프로세스 집합에 대해서 평균 대기시간이 최소가 되는 최적 알고리즘
        - CPU 요구시간이 긴 작업과 짧은 작업간의 불평등이 심하여, CPU 요구시간이 긴 프로세스는 Starvation(기아상태) 발생 가능.

  • HRN (Highest Response ratio Next)
        - 프로세스 처리의 우선순위를 CPU 처리 기간과 해당 프로세스의 대기 시간을 동시에 고려해 선정하는 스케줄링 알고리즘
        - Response ratio = (대기시간 + 서비스 시간) / 서비스 시간
        - 대기중인 프로세스 중 현재 Response Ratio가 가장 높은 것을 선택
        - SJF의 약점을 보완한 기법으로 긴 작업과 짧은 작업간의 불평등을 완화

  • 우선순위 스케줄링
        - 각 프로세스에 우선순위가 주어지고 우선순위에 따라 CPU 할당하는 스케줄링 알고리즘
        - 동일한 우선순위간은 FCFS 처리
        - 우선순위 결정 : 관리자에 의한 결정, 자원요구량에 의한 결정, CPU처리 시간에 의한 결정, 시스템에서 보낸 시간에 의한 결정 등 사용
        - 우선순위가 높은 작업이 계속적으로 들어오게 될 경우 우선순위가 낮은 프로세스는 starvation 발생 -> Aging 기법으로 해결







선점(Preemptive) 스케줄링 알고리즘
  • RR(Round Robin)
        - 시분할 시스템을 위해 설계된 선점형 스케줄링의 하나로서, 프로세스들 사이에 우선순위를 두지 않고, 순서대로 시간단위(Time Quantum)로 CPU를 할당하는 스케줄링 알고리즘
        - 시간 단위동안 수행한 프로세스는 준비 큐의 끝으로 밀려나게 됨
        - 문맥 전환의 오버헤드가 큰 반면, 응답시간이 짧아지는 장점이 있어 실시간 시스템에 유리하다.
        - 시간 단위가 크면 FCFS와 같게 된다.

  • SRT(Shortest Remaining Time)
        - 가장 짧은 시간이 소요된다고 판단되는 프로세스를 먼저 실행.
        - 남은 처리 시간이 더 짧다고 판단되는 프로세스가 준비 큐에 생기면 언제라도 프로세스가 선점됨
        - 긴 작업은 SJF 보다 대기 시간이 길다.

  • 다단계 큐(Multilevel Queue)
        - 커널 내의 준비 큐를 여러 개의 큐로 분리하여 큐 사이에도 우선순위를 부여하는 스케줄링 알고리즘.

  • 다단계 피드백 큐(Multilevel Feedback Queue)
        - 다단계 큐 스케줄링에서 한 단계 발전된 방식으로, 다단계 큐 스케줄링에서는 프로세스가 하나의 큐에 영구적으로 할당되지만, 다단계 피드백 큐 스케줄링에서는 프로세스들이 큐를 갈아탈 수 있다.
        - 작업들이 서로 다른 유형의 작업들로 분류될 경우 사용.
        - 새로운 프로세스는 높은 우선순위, 프로세스의 실행시간이 길어질수록 점점 낮은 우선순위 큐로 이동 (맨 마지막 단계에서는 RR 처리)

        - 하위단계일수록 할당시간은 증가 (공평성 부여)
        <출처 : ilifo >

















    

'운영체제' 카테고리의 다른 글

메모리 관리  (0) 2018.09.01
커널(Kernel), 마이크로 커널&모놀리식 커널  (0) 2018.08.28
캐시 메모리(Cache Memory)  (0) 2018.08.28
교착상태(Deadlock)  (0) 2018.08.28
세마포어와 뮤텍스 (Semaphores&Mutex)  (0) 2018.08.26

커널 (Kernel)
  • 커널은 컴퓨터의 운영체제의 핵심.
  • main memory에 상주하며, 시스템에 존재하는 자원을 효율적으로 관리하는 자원 관리자.
                        <General UNIX Architecture, Traditional UNIX kernel>



커널의 역할
  • 보안 - 컴퓨터 하드웨어와 프로세스의 보안을 책임진다.
  • 프로세서 관리 - 처리 속도를 향상시키기 위해 여러 프로세서를 병렬로 연결하여 사용한다. 시스템에서 동작하는 프로세스도 커널에서 관리해야할 자원이고, 운영체제의 처리 요구에 맞춰 동작할 수 있도록 각 프로세스에 필요한 프로세서를 효율적으로 할당하고 수행하도록 관리한다.
  • 프로세스 관리 - 여러 프로세스가 동작할 수 있도록 각 프로세스를 생성하고 제거하며, 외부환경과 프로세스를 연결하고 관리한다. (스케줄링)
  • 메모리 관리 - 각각의 프로세스가 독립적인 공간에서 수행할 수 있도록 가상 주소 공간을 제공한다.
    이외에도 파일 시스템 관리, 디바이스 제어, 네트워크 관리가 있다.



모놀리식 커널(Monolithic Kernel,단일형 커널)과 마이크로커널(Micro Kernel)

  • 모놀리식 커널
        - 입출력 기능, 네트워크 기능, 장치 지원 등 운영체제의 일반적인 기능을 커널과 동일한 메모리 공간에 적재, 실행하는 기법.
       - 속도가 빠르고 디자인도 편리하지만, 잠재적 안정성 문제와 커널의 크기도 무지막지하게 커진다. 
        - Monolitic Kernel 방식을 따르는 운영체제 : 리눅스, 보통의 UNIX, 맥OS, MS-DOS





  • 마이크로 커널
        - 낮은 수준의 주소 공간 관리, 스레드 관리, 프로세스 간 통신(IPC)를 포함하고, 시스템 콜 같은 서비스, 디바이스 관리 등을 제외하여 안정성을 높이고, 커널 크기도 줄인 방식.
        - 안정성이 높고 보안도 높아지지만, 전반적인 퍼포먼스는 저하된다.
        - 이 방식을 따르는 운영체제 : AmigaOS, Minix, Mach, GNU hurd









     
     


'운영체제' 카테고리의 다른 글

메모리 관리  (0) 2018.09.01
CPU Scheduling (CPU 스케줄링)  (0) 2018.08.30
캐시 메모리(Cache Memory)  (0) 2018.08.28
교착상태(Deadlock)  (0) 2018.08.28
세마포어와 뮤텍스 (Semaphores&Mutex)  (0) 2018.08.26

+ Recent posts