본문 바로가기
Programing/OS

[OS] OS 동작 원리

by 꾸압 2022. 12. 16.

 

<OS 특징>

[OS System 의 핵심 요소]

  1) Abstraction :

    ==> Process, Thread, File, Socket, Memory

 

  2) Mechanism :

    ==> Create, Schedule, Open, Write, Allocate

 

  3) Policy :

    ==> LRU, EDF

 


 

[OS 설계 원리]

  1) Seperation of mechanism and policy

    ==> 정책 지원을 위한 유연한 Mechanism 구현

 

  2) Optimization for common case

    ==> OS 가 어디에 사용되는가?

    ==> User가 그 기계로 뭘 Execute 하길 원하는가?

    ==> Workload 요구사항은 무엇인가?

 


 

[OS Type]

  1) Monolithic OS

    ==> 전체 OS 가 Kernel 공간에서 작동하며, Supervisor Mode 에서 혼자임(?)

 

  2) Modular OS

    ==> System Core 의 일부가 Module이란 독립된 File 에 위치 가능함.

    ==> Module은 Run Time 할 때 System에 추가할 수 있음.

 

  3) Micro OS

    ==> Kernel 이 Server라 불리는 별도의 Process로 쪼개짐.

    ==> Server 의 일부는 Kernel 공간에서 동작하고, 일부는 User-공간 에서 일함.

 


 

<OS 핵심 개념>

[1. Processes and Process Management]

  - Process 는 기본적으로 Execution 중인 Program.

  - Process 의 싱행은 반드시 순차적인 과정에서 진행함.

  - Program 이 Memory로 Load 되어 Process 가 되면 4부분으로 나눠짐.

    ==> Stack, Heap, Text, Data


이미지 출처 : Data-Notes

   - 위 이미지는 Main Memory 내부의 Process 구조

    ==> Stack : Method/Function Parameter, Return 주소, Local 변수 같은 Temporary Data 를 가짐

    ==> Heap : Run-Time 동안 Process에 동적으로 할당되는 Memory.

    ==> Data : Global 및 Static 변수를 가짐.

    ==> Text : Program Count 값으로 표시되는 현재 활동과 Processor의 Register 내용이 들어감.


이미지 출처 : Data-Notes

 

  - 위 이미지는 Process Execute 할 때 OS 의 일반적인 상태를 나타낸 것.

    * Start :

      ==> Process가 시작하거나 생성될 때의 초기 상태.

    * Ready :

      ==> Process 가 프로세서에 할당되길 기다림. 할당되어야 작동함.

      ==> Process는 Start 상태 직후 이 상태가 되거나,
             Process를 실행 중일 때 CPU를 다른 Process에 할당하려는 Scheduler에 의해 중단될 수 있음.

    * Running :

      ==> OS Scheduler에 의해 Process가 프로세서에 할당되면,
             Process 상태를 Running으로 설정되고 프로세서는 명령을 Execute 함.

    * Waiting :

      ==> Process가 Resource를 기다릴 필요가 있으면 Waiting 상태로 이동.

      ==> Waiting Resource 는 User의 Input 이나 File이 사용가능해지는 것 등.

    * Terminated or Exit :

      ==> Process 가 Execution을 마치거나 OS에 의해 종료되면,
             Main Memory에서 제거되길 기다리는 Terminated 상태로 이동.


  - Process 제어 Block은 모든 Process가 OS System에 의해 유지관리되는 Data 구조.

  - PCB 는 정수 Process ID(PID)로 식별되며, Process를 추적하는데 필요한 모든 정보를 유지.

이미지 출처 : Data-Notes

 

  - Process 추적에 필요한 각 정보의 특징은 아래와 같다.

 

    * Process State

    * Process Privileges :

      ==> System Resource 에 대한 Access 허용/금지 에 필요.

    * Process ID :

      ==> OS의 각 Process에 대한 고유 식별

    * Pointer :

      ==> Parant Process 로의 Pointer

    * Program Counter :

      ==> 이 Process에 대해 실행될 다음 명령의 Address에 대한 Pointer.

    * CPU Register :

      ==> Running 상태의 Execute를 위해 Process를 저장해야 하는 다양한 CPU Register.

    * CPU Scheduling Information :

      ==> Process Schedule에 필요한 Process 우선순위와 다른 Scheduling 정보.

    * Memory Management Information :

      ==> OS에 쓰일 Memory에 의존하는 'Page 테이블, Memory 제한, Segment Table' 등의 정보를 가짐.

    * Accounting Information :

      ==> Process 실행, 시간 제한, Execution ID 등에 쓰이는 CPU Amount(양)을 가짐.

    * IO Status Information :

      ==> Process에 할당된 I/O 장치들의 목록

 


 

[2. Thread and Concurrency]

[Thread 설명]

  - Thread는 Process Code를 통한 Execution의 흐름.

  - 다음에 Execute 할 명령을 추적하는 자체 Program Counter가 있음.

  - 현재 작업 변수를 가진 System Register와 실행기록을 포함하는 Stack을 가짐.

  - Thread 는 Code Segment, Data Segment, Open File 과 같은 다양한 정보를 Peer Thread와 공유.

  - 어떤 Thread 가 Code Segment Memory Item을 바꾸면 다른 모든 Thread가 이를 확인함.

  - Thread는 Lightweight(경량) Process라고도 불림.

  - Thread는 Parallelism을 통해 Application 성능을 향상시킴.

  - Thread는 Overhead를 줄여 OS 성능을 향상시키는 Software 접근 방식을 함.

  - Thread는 정통적인(Classical) Process와 동등함.

  - 각 Thread는 정확히 하나의 Process에 속하며, 어떤 Thread도 Process 밖에서 존재할 수 없음.

  - 각 Thread는 제어흐름이 서로 겹치지 않고 구별됨.

  - Thread는 Network Server 및 Web Server 구현에 매우 훌륭히 사용됨.

  - 공유 Memory Multi-processor 에서 Application의 병렬 Execution을 위한 적절한 기반을 제공.

 

이미지 출처 : Data-Notes


[Thread 이점]

  - Context 전환 시간을 최소로 함.

  - Process 내에 Concurrency(동시성) 제공

  - 효율적인 통신 제공.

  - Thread 를 만들고 Context를 전환하는게 더 경제적

  - 다중 프로세서 Architecture를 더큰 규모와 효율성으로 활용 가능


[Thread 작동 방식]

  - Thread는 2가지 방식으로 Implement(실행) 됨

    1) User Level Threads : 사용자 관리 Thread

    2) Kernel Level Threads : OS Core의 Kernel에서 작동하는 OS 관리 Thread

 

  [1. User Level Threads]

    - 여기서 Thread 관리 Kernel은 Thread의 존재를 인식 못 함.

    - Thread Library는 Thread 간 Message 및 Data 전달, Thread 실행 예약,
          Thread Context 저장 및 복원, Thread 생성&파괴를 위한 Code를 가짐.

    - Application은 Single Thread로 시작함.

이미지 출처 : Data-Notes

    - User Thread 장점

      * Thread 전환에 Kernel Mode 권한이 필요 없음.

      * 어느 OS 든지 동작.

      * Scheduling이 Application에 따라 다를 수 있음

      * 생성 & 관리가 빠름

 

    - User Thread 단점

      * 전형적인 OS에서 대부분의 System은 Blocking을 호출

      * Multi-Thread Application은 Multi-Processing의 이점이 없음


  [2. Kernel Level Threads]

    - Thread 관리가 Kernel에 의해 이뤄짐.

    - Application 영역에 Thread 관리 Code가 없음.

    - Kernel Thread는 OS에 의해 직접 지원 받음.

    - 어떤 Application 이든 Multi-Thread Programming이 가능함.

    - Application 내의 모든 Thread는 Single Process 내에서 지원됨.

    - Kernel은 Process 전체와 Process 내의 개별 Thread에 대한 Context 정보를 유지.

    - Kernel 에 의한 Scheduling은 Thread 기반으로 Perform(수행).

    - Kernel 은 Kernel 공간에서 Thread 생성, Scheduling 및 관리를 함.

 

이미지 출처 : Data-Notes

  - Kernel Thread 장점

    * Kernel 은 여러 Process의 동일한 Process에서 동시에 예약 가능

    * Process의 한 Thread가 막히면 Kernel은 같은 Process의 다른 Thread를 Schedule 함.

    * Kernel Routine 은 그들 자체로 Multi-Thread가 가능함.

 

  - Kernel Thread 단점

    * 보통 User Thread 보다 Create & Manage 속도가 느림.

    * 같은 Process 내의 한 Thread에서 다른 Thread로 제어 이동하는건 Kernel의 Mode 전환이 필요함.

 


 

[3. Scheduling]

  - Scheduling Process는 동작중인 Process를 CPU에서 제거하고, 특정 전략에 따라 다른 Process를 선택하는 일을 해야 할 Process Manage의 책임.

  - 다중 Programming OS의 핵심 부분.

  - 이런 OS는 한번에 둘 이상의 Process를 실행 가능 Memory에 로드 가능하며, Load된 Process는 시간 Multiplexing(다중화)를 통해 CPU를 공유.

  - OS는 Processing Scheduling Queues에서 모든 PCB(Process Control Blocks)를 유지.

  - OS는 각 Process 상태에 대해 별도의 Queue를 유지하며, 동일한 실행 상태에 있는 모든 Process의 PCB는 동일한 Queue에 배치.

  - Process 상태가 변경되면 PCB가 현재 Queue에서 해제되고, 새 상태 Queue로 이동

 

  - OS는 다음 3가지 중요한 Process Scheduling Queue를 유지함.

    1) Job Queue : 이 Queue는 System에 모든 Process를 유지.

    2) Ready Queue : Main Memory에 상주하는 모든 Process 집합체를 유지하고, Execute를 위해 대기.

    3) Device Queue : I/O 장치를 사용할 수 없어 차단된 Process가 이 Queue를 구성.

 

  - OS 는 각 Queue(FIFO, Round Robin, Priority 등)을 관리하기 위해 서로 다른 정책을 사용 가능.

  - OS Scheduler는 System Procss Core 당 하나의 항목만 가질 수 있는 Ready Queue와 Run Queue 간에 Process를 이동하는 방법을 결정.

 

  - 상태(State) Model로는 Running와 Non-Running State가 있음.

    1. Running : 새로운 Process가 생성되면 Running 상태의 System 안으로 들어감.

    2. Not Running :

      ==> 실행되지 않는 Process는 Queue에 보관되어, 차례가 와서 Execute 되길 기다림.

      ==> Queue의 각 Entry(항목)은 특정 Process에 대한 Pointer.

      ==> Queue는 Linked List를 사용하여 Implement(시행) 됨.

      ==> Process가 중단되면 그 Process는 Waiting Queue로 이동.
             만약 Process가 완료되거나 중단된 경우, Process는 버려짐.
             두 경우 모두 Dispatcher는 Queue에서 실행할 Process를 선택.

 

  - 한 Process에서 다른 Process로 전환하는 Context Switch.

    ==> Context Switch는 Process Control Block 에서 CPU의 상태 또는 Context를 저장하고 복원하는 Mechanism.

    ==> Context Switch를 통하여 나중에 동일한 지점에서 Process Execution을 재개 가능.

    ==> Context Switching은 OS Mult-Tasking의 핵심 특징.

    ==> Scheduler가 한 Process Executing에서 다른 Process로 CPU를 전환하면,
           현재 Executing 중인 Process의 상태가 Process Control Block에 저장됨.

    ==> 이 과정을 거친 이후, 다음 Process 상태는 자체 PCB에서 Load 되어 PC, Register 등을 설정하는데 쓰임.

    ==> 이 지점에서 두번째 Process가 Executing 을 시작 가능.

    * Process가 전환되면, 다음의 정보는 나중을 위해 저장됨.
      ==> Program Counter, Scheduling Information, Base and Limit Register Value, Currently Used Register,
             Changed State, I/O State Information, Accounting Information

 


 

[4. Memory Management]

  - Primary Memory를 다루거나 관리하는 OS의 기능.

  - Execution 하는 동안 Main Memory와 Disk 사이에서 Process를 앞뒤로 이동시킴.

  - Memory가 일부 Process에 할당되었든 자유롭게 사용가능하든 상관없이 모든 Memory 위치를 추적.

  - Process에 할당될 Memory 양이 얼마나 될 지 확인.

  - 어떤 Process가 어떤 시간에 Memory를 얻을지 결정함.

  - Memory가 해제되거나 할당되지 않을 때마다 추적하고 그에 맞춰 상태를 업데이트.


  * 관련 정보인 Process Address Space에 대해 보자.

    ==> Process가 Code에서 참조하는 논리 Address 집합체.

    ==> OS는 Program에 Memory를 할당할 때 논리 Address를 물리 Address로 Mapping.

    ==> Memory가 할당되기 전&후로 Program에서 사용되는 3가지 유형의 Address가 있음.

      1) Symbolic Addresses :

        - 주소는 Source Code에 쓰임.

        - 변수명, 상수, 명령 Label 등은 Sysbolic Address의 기본 요소.

      2) Relative Addresses :

        - Compile 할 때 Compiler는 Symbolic Address를 Relative Address로 변환.

      3) Physical Addresses :

        - Loader는 Program이 Main Memory에 Load될 때 이 Address를 생성.

 

  - Virtual(가상) 및 Physical(물리) 주소는 Compile-Time 및 Load-Time Address Binding Scheme(체계)에서 동일.

  - Logical Address Space : Program에 의해 생성된 모든 논리 Address 집합체

  - Physical Address Space : 이런 Logical Address에 해당하는 모든 물리 Address의 집합체

 

 

 


[5. Inter-Process Communication]

  - 두 가지 유형의 Process가 있음. Independent & Cooperating.

    * Independent : 다른 Process 실행에 영향 안 받음.

    * Cooperating : 실행 중인 다른 Process에 영향 받음

    * 계산 속도 & 편의성 & Module 기능 등을 고려하면 Independent가 더 효율적으로 Execute 하지 않음.

 

  - Inter-Process Communication(IPC, 프로세스 간 통신) :

    * Process가 서로 통신하고 작업 수행 시기를 서로 맞추는 Mechanism.

    * IPC 는 Cooperating 유형에 가까움.

 

  - Shared Memory Method

    * 생산자와 소비자 Process 가 있다고 하자.

      ==> 생산자가 만든 Item이 저장되고 필요한 경우 소비자가 Item을 소비하는 Buffer 란 공통 공간 or Memory 위치를
             두 Process가 서로 공유.

    * 여기엔 두 가지 문제가 있음.

      1) Unbounded Buffer Problem(무제한 버퍼 문제)

        ==> 생산자가 항목을 끝없이 생산 가능하며, Buffer 크기에 제한이 없음.

      2) Bounded Buffer

        ==> 생산자는 Item을 특정 갯수까지 생산하며, 이후에 소비자가 Item을 소비하려고 대기.

        ==> 소비자는 먼저 Item을 쓰는게 가능한지 확인하고, Item이 없으면 소비자는 생산자가 생산할 때까지 기다림.

 

이미지 출처 : Data-Notes

 

  - Message Parsing Method

    * Process는 어떤 Shared Memory도 쓰지 않고 서로 통신하는 방법.

    * 두 Process p1 & p2가 서로 통신한다면 다음처럼 진행함.

      ==> 통신 Link를 설정 (Link가 이미 존재하면 설정할 필요 없음).

      ==> 기본 Primitive를 사용하여 메시지를 교환하기 시작. 여기선 최소 2가지 Primitive가 필요.
              Send(Message, Destination) & Send(Message) & Receive(Message, Host) & Receive(Message)

      ==> 메시지 크기는 고정되거나 변함. 고정 크기라면 OS 설계자는 쉽지만 Programmer는 복잡. 변동 크기는 반대.

      ==> Standard(표준) 메시지는 Header와 Body로 구성.

      ==> Header는 메시지 유형, 대상 ID, Source ID, 메시지 길이 및 Control 정보를 저장.

      ==> Control 정보는 Buffer 공간이 부족할 때 수행 예정 작업, Sequence Number, Sequence Number의 우선순위 등을 포함.

      ==> 메시지는 FIFO 방식으로 전송.

 


 

[6. Input/Output Management]

  - OS에 중요한 작업 중 하나는 마우스, 키보드, Disk Drive, Display Adaptor 같은 다양한 I/O 장치 관리.

  - I/O System은 Application이 보낸 I/O 요청을 받아 Physical Device로 보내고,
    Device에서 반환한 응답을 받아 Application으로 보냄.

 

  - I/O Device 는 2가지 분류가 있음.

    1) Block Devices :

      ==> Driver가 전체 Data Block을 전송하여 통신하는 Device.

      ==> 예시로 Hard Disk, USB Camera, Disk-On-Key

    2) Character Devices :

      ==> Character Device는 Driver(Byte, Octet) 를 송수신하여 통신하는 Device.

 

이미지 출처 : Data-Notes

 

  - CPU와 Device가 통신하는 3가지 접근법

    1) Special Instruction I/O

      * I/O Device를 제어하고자 특별히 만들어진 CPU Instruction(명령)을 사용.

      * Instruction은 Data를 I/O Device로 보내거나, I/O Device에서 읽는게 가능하도록 함.

    2) Memory-Mapped I/O

      * 이걸 통해 동일한 Address 공간이 Memory 및 I/O 장치에서 공유.

      * Device는 특정 Main Memory에 직접 연결되어, I/O Device가 CPU를 안 거치고 Memory 및 Data Block을 주고 받음.

      * Memory-Mapped I/O를 쓰는 동안 OS는 Memory Buffer를 할당하고,
        I/O Device에 해당 Buffer를 사용하여 Data를 CPU로 보내도록 알림.

      * I/O Device는 CPU와 비동기식으로 작동하며, 완료시 CPU를 중단.

      * 이 방식이 가진 장점은 Memory에 Access하는 모든 Instruction을 I/O 장치 조작에 사용함이다.

 

이미지 출처 : Data-Notes

 

    3) Direct Memory Access (DMA)

      * 키보드 같은 느린 Device는 각 Byte가 전송 후 Main CPU에 Interruption을 생성.

      * Disk  같은 빠른 Device가 각 Byte에 Interruption을 생성하면, OS는 Interruption 처리에 많은 시간을 소비.

      * 보통 Computer는 Direct Memory Access(DMA) Hardware로 Overhead를 줄임.

      * DMA는 Involvement(개입) 없이 Memory에서 Read/Write 하는 I/O Module 권한을 CPU가 부여함을 의미.

      * DMA Module 자체는 주 Memory와 I/O Device 간 Data 교환을 제어.

      * CPU는 전송의 시작&끝만 관여하며, 전체 Block이 전송된 후에만 Interrupt 됨.

      * DMA를 위해 Data 전송 관리 및 System Bus Access를 중재하는 DMA Controller(DMAC) 란 Hardware가 필요.

      * Controller는 Source 및 Destination(목적지) Pointer, 전송 Byte 숫자를 추적하는 Counter 및 다양한 설정으로 구성.

        ==> 여기엔 I/O, Memory 유형, CPU Cycle(주기)에 대한 Interruption & State 를 포함.

 


 

[7. Virtualization]

  - Single한 Physical Hardware System에서 여러 Simulated 환경 혹은 Dedicated(전용) Resource를 생성.

  - Hypervisor는 해당 Hardware에 직접 연결되어 하나의 System을 VM(가상 머신)로 분할.

    ==> VM은 Computer의 Resource를 Hardware에서 분리 및 적절하게 배포하는 Hiperviser 기능에 의존.

 

  - HyperVisor가 장착된 본래 Physical System을 Host라 함.

  - Resource를 사용하는 수 많은 VM을 Guest라 함.

    ==> Guest는 CPU, Memory, Storage 등 Computing Resource를 쉽게 재배치하는 Resource Hangar(격납고?).

 

  - Operator는 Guest가 필요할 때 필요한 Resource를 받도록
    CPU, Memory, Storage, 기타 Resource가 가진 Virtual Instance를 제어.

  - 관련된 모든 VM은 속도를 높이는 '단일 Web 기반 VIrtualization(가상) 기능 관리 Console'로 관리.

  - VIrtualization으로 VM에 제공하는 Processing Power, Storage 및 Memory Amount(양)을 지정.

  - 여러 VM이 지원 기능 Hardware 및 각자가 서로 분리된 이유로 환경이 잘 보호됨.

  - VIrtualization은 사용율이 낮은 Hardware로 부터 필요한 환경과 Resource를 생성.

 

  - [Virtualization 유형]

    1) Data

      ==> 곳곳에 흩어진 Data를 Single Source로 통합

      ==> 기업은 Data를 여러 Source Data를 통합 처리하는 Dynamic Supply로 취급하여,
             새로운 Data Source를 쉽게 수용하고 User 요구에 따라 Data를 변환.

      ==> 필요한 Data를 적절한 형식으로 때에 맞춰, 모든 Application이나 User에게 제공.

    2) Desktop

      ==> 중앙 Administer(관리자) 혹은 자동 관리 도구는
             Simulate 된 Desktop 환경을 수백 대의 Physical System으로 한번에 배포.

      ==> 각 System에 Physical로 설치, 구성, 업데이트하는 기존 Desktop 환경과 달리,
             Desktop 가상 기능으로 Administer는 모든 가상 Desktop에 대량 구성, 업데이트, 보안 검사를 수행.

    3) Server

      ==> 수 많은 특정 작업을 효율있게 처리하도록 설계된 Computer.

      ==> Laptop 및 Desktop과 같은 다른 Computer에서 다양한 작업을 수행.

      ==> Server가 가상 기능을 가지면 이런 특정 기능을 더 많이 수행하며,
             구성 요소를 사용하여 여러 기능을 제공하도록 Server를 분할.

    4) Operating System

      ==> OS 중앙 작업 Manager인 Kernel 에서 발생.

      ==> Linux & Window 를 함께 실행하는데 유용.

      ==> 즉시 사용하는 기능을 필요로 하지 않아 Hardware Cost 절감

      ==> Virtual Instance를 모니터링 및 격리하여 보안 강화.

      ==> Software 업데이트 등 IT 서비스 사용시 발생하는 소요 시간을 제한.

    5) Network Function

      ==> NFV 는 Network 주요 기능(e.g. Directory Service, File 공유, IP 구성)을 분리하여 환경들을 각기 분산시킴.

      ==> Software 기능이 예전에 있던 Physical System에서 독립하면,
             특정 기능을 새로운 Network로 함께 Packaging 및 환경 할당.

      ==> 스위치, 라우터, Server, 케이블, Hub 등 독립 네트워크를 형성에 쓰이는 Physical Component의 수를 줄임.

 


 

[8. Distributed File Systems]

  - Client가 마치 자기 Computer인 것 처럼 Server에 저장된 Data에 Access하고 처리 가능하게 하는 Client-Server 기반 Application.

  - User가 Server의 File에 접근하면 Server는 User에게 Data가 처리되는 동안
    User의 Computer에 Cache한 후 Server로 반환되는 File 복사본을 보냄.

  - Distributed File System은 원격 Data Access가 특정 위치에 국한되지 않고,
    모든 Client에서 동일한 방식으로 개별 Server의 File 및 Directory Service를 Global Directory로 구성.

 

  - 모든 File은 Global File System의 모든 User가 Access할 수 있으며, 조직은 수직 계층구조 및 Directory 기반임.

 

  - 둘 이상의 Client가 동일한 Data에 대하여 동시에 Access할 수 있기에, Server는 업데이트를 구성하기 위한 Mechanism(Access 시간에 대한 정보 유지)이 있어야 함.

    ==> 이를 통해 Client는 항상 최신 Data를 수신받고, Data 충돌이 발생하지 않음.

 

  - 보통 File or Database 복제(여러 Server에 Data 복사본 배포)를 통해 Data Access 실패를 방지.

 


 

[9. Distributed Shared Memory]

  - 물리적 Shared Memory가 없는 Distributed System에서,
    Shared Memory Model를 Implement(실행)하는 Distributed OS의 Resource 관리 구성 요소.

  - Shared Memory는 Distributed System의 모든 Computer 간에 공유되는 가상 Address 공간을 제공.

  - DSM에서 Data는 가상 Memory에 Access하는 방식과 유사한 공유 공간에서 Access.

 

  - Data는 보조 Memory와 Main Memory 사이 뿐 아니라 서로 다른 노드의 Distributed Main Memory 사이를 이동.

  - Memory의 페이지 소유권은 사전 정의된 상태에서 시작되지만, 정상 작동 과정에서 변경됨.

  - 특정 Process의 Access로 인해 Data가 한 Node에서 다른 Node로 이동할 때 소유권 변경이 발생.

 

이미지 출처 : Data-Notes

 

  - DSM의 장점

    * Data 이동을 숨기고 Data 공유를 위한 더 간단한 Abstraction을 제공.

    * Programmer는 메시지 전달 Model을 사용할 때처럼 Computer 간의 Memory 전송에 대해 걱정할 필요가 없음.

    * Data 조각이 아닌 참조 Data가 포함된 전체 Page를 이동하여 "Locality of Reference(참조 지역성)"의 이점을 가짐.

    * Muti-Processor System보다 구축 비용이 저렴.
      Idea(?)가 일반 Hardware를 통해 구현 가능하며, Shared Memory를 Process에 연결하는 과정에 복잡함이 없음.

    * 모든 Node의 Physical Memory를 결합하여 더 큰 Memory 크기를 Program에서 사용 가능.

    * Node를 무제한한 수(number)만큼 쓸 수 잇음.

    * Shared Memory Multi-Processor로 작성된 Program은 DSM System으로 실행 가능.

 

  - 누가 어떤 Page를 소유중인지 Node에 알리는 두 가지 방법이 있음.

    1. Invalidation :

      ==> 일부 Process가 해당 Page에 대한 Write Access를 요청 후 새 Owner가 될 때, Page를 Invalidate(무효화) 함.
              이로써 다음 번에 타 Process가 자신이 갖고 있다고 여긴 Page의 복사본을 Read/Write 할 때,
              해당 Page를 사용할 수 없으며, Process는 해당 Page에 대한 Access를 다시 요청해야함.

    2. Broadcast :

      ==> Process가 Memory Page에 Write할 때 Memory Page의 모든 복사본을 자동으로 업데이트 함.

      ==> 이 방법은 Invalidation 메시지 대신 새 Value를 보내야 하기에 훨씬 덜 효율적이고 구현이 어려움.

 


 

[10. Cloud Computing]

  - Cloud Computing을 통해 사용자가 Data를 직접 소유하지 않고, Harware 및 Software에 대한 관리를 하지 않아도 된다는 말.

  - (본인 주) 대체 이게 OS 동작원리와 무슨 상관성이 있어서 넣은거지?

 


 

<참조 1> https://data-notes.co/how-operating-systems-work-10-concepts-you-should-know-as-a-developer-8d63bb38331f

<참조 2>

 

 

'Programing > OS' 카테고리의 다른 글

[OS] Layered Operating System (OS 6 계층)  (0) 2022.12.11
[OS] CPU vs GPU 차이  (0) 2022.08.15
[OS] Data Propagation  (0) 2022.08.11
[OS] Cache Hit Ratio  (0) 2022.08.10

댓글