• 주기억장치 관리
    - 주소 바인딩
     : 프로그램을 작성할 때, 프로그래머는 기호 주소를 사용한다. 즉, 변수를 선언하고 이 변수 이름을 통해 주소를 접근
     : 프로그램은 실행되기 전에 이런 기호 주소를 실제 주소로 바인딩해주어야 한다.
     : 주소 바인딩 시기
     ■ 컴파일 시간(Compile time)
      : 컴파일러가 프로세스가 어디에 적재될지 알고 있으면 컴파일할 때 주소를 바인딩할 수 있다.
     ■ 적재 시간(Load time)
      : 컴파일할 때 프로세스가 어디에 적재될지 모르면 컴파일러는 재배치 가능 코드를 생성한다. 실제 바인딩은 적재할 때까지 지연된다. 재배치 가능 코드란 기준 위치 주소를 사용하는 코드를 말한다.
     
    ■ 실행 시간(Execution time)
      : 실행 도중에 프로세스의 적재 위치가 바뀔 수 있으면 바인딩은 실행될 때 이루어진다.



    - 논리(Logical) vs 물리적(Physical) 주소 공간
     : CPU에 의해 생성되는 주소는 보통 논리적 주소
     : 주기억장치가 접하게 되는 주소는 물리적 주소(MAR, Memory Address Register에 적재되는 주소)
     : 실행 시간 바인딩의 경우에는 논리적 주소와 물리적 주소가 다르며, 이 경우에는 논리적 주소를 가상주소(virtual address)라 한다.
     : 실행 시간 바인딩에서 논리적 주소와 물리적 주소 간에 매핑은 주기억장치-관리 장치(MMU, Memory-Management Unit)라 하는 하드웨어에 의해 이루어진다.
     

    - 가상주소는 왜 사용?
     : 현재 실행에 필요한 page만 memory에 올리고, 나머지는 swap device쪽에 있어라
     : 한 프로세스당 차지하는 memory 공간을 줄이자 (= multiprogramming degree를 높인다 = CPU utilization / throughtput이 높아진다)
     : 프로그래밍이 쉽다 (프로그래머가 물리적 메모리 사용량을 신경쓰지 않아도 됨)
     : memory에 프로세스를 load, swap하는 시간이 적게 든다.

    - 동적 적재 (Dynamic loading)
     : 초창기에는 프로그램이 실행되기 위해서는 전체 프로그램이 모두 주기억장치에 적재되어야 했다. -> 프로세스의 크기가 물리적 주기억장치 크
    기에 의해 제한된다.
     : 루틴이 호출될 때 주기억장치에 적재하는 방법
     : 모든 루틴은 재배치 가능 코드 형태로 디스크에 유지된다.
     : main 프로그램이 먼저 적재되며, 실행 도중에 다른 루틴을 호출해야 하면 이 루틴이 현재 주기억장치에 있는지 검사하고 없으면 재배치 가능 연결 적재기(relocatable linking loader)를 이용하여 루틴을 주기억장치에 적재한다.
     : 사용하지 않는 루틴은 주기억장치에 적재되지 않는 장점이 있다.


    - 동적 연결과 공유 라이브러리
      ■ 정적 연결(static linking)   
       : 프로그래밍 언어에서 제공하는 라이브러리를 프로그램과 결합하여 사용하는 방식
       : 모든 프로그램은 라이브러리의 복사본을 가지고 있다. 따라서 디스크 공간과 주기억장치 공간이 모두 낭비 된다.
      ■ 동적 연결(dynamic linking)
       : 라이브러리와의 연결이 실행 시간까지 연기되는 방식
       : 각 프로그램에 stub가 포함되며, 이 것은 주기억장치에 공유되고 있는 라이브러리 루틴에서 프로그램이 필요하는 루틴을 찾아주는 적은 양의 코드이다.
       : 어떤 루틴을 처음 호출할 때만 stub가 필요하며, 그 루틴을 다시 호출하면 주소 정보를 이용하여 바로 호출한다.
       : 라이브러리 갱신이 용이하고, 디스크 공간과 주기억장치 공간을 절약할 수 있다.
       : 다른 주소 공간을 접근해야 하므로 운영체제 지원이 필요하다.

    - 스왑핑 (Swapping)
      : 프로세스는 실행 도중에 일시적으로 주기억장치에서 디스크로 옮겨진 후에 나중에 다시 주기억장치에 적재되어 실행을 재개할 수 있다. 이 과정을 스왑핑(Swapping)이라 한다.

     

    - 연속적 공간 할당
     : 주기억장치는 운영체제 영역과 사용자 프로세스 영역으로 분리되며, 보통 운영체제는 하위 주소에 위치
     : 각 사용자 프로세스는 연속된 단일 영역을 할당받는다.
     : 운영체제를 사용자 프로세스로부터 보호해야 하며, 사용자 프로세스를 다른 사용자 프로세스로 부터 보호해야한다.
     : 이를 위해 기저(Base) 레지스터, 한계(Limit) 레지스터를 사용한다.
     
     : 운영체제는 현재 사용되고 있는 공간과 사용되지 않는 공간을 테이블에 유지한다.
     : 처음에는 운영체제가 적재되어 있는 공간을 제외하고는 모두 사용 가능하며, 사용 가능한 영역을 홀(hole)라 한다.
     : 어떤 홀에 프로세스를 할당할 것인가?

        ■ First-fit
    : 충분히 큰 첫 번째로 발견한 홀에 할당
        ■ Best-fit: 프로세스를 수용할 수있는 가장 작은 홀에 할당
        ■ Worst-fit: 가장 큰 홀에 할당

         =>
     외부 단편화 발생
             모든 홀을 합하면 프로세스를 수용할 수 있으나 연속 공간이 아니기 때문에 프로세스를 할당할 수 없는 경우
             -> 할당되어 있는 프로세스의 적재 위치를 재배치하여 하나의 큰 홀을 얻는 compaction 방법을 이용
         => 내부 단편화 발생
             할당된 메모리가 요구된 메모리보다 커서 사용되지 않아 낭비되는 경우

    - 페이징

       : 현재 가장 널리 사용되는 기법으로 프로세스에게 연속된 공간을 할당해주지 않아도 된다.
       : 운영체제 + 하드웨어를 연관시켜 구현
       : 물리적 기억장치는 고정된 크기의 프레임(frame)으로 나눔
       : 논리적 주소공간도 프레임과 같은 크기의 페이지(page)로 나눔
       : 오늘날은 4KB 또는 8KB의 페이지 크기 사용
       : 프로세스가 실행될 때 그것의 페이지는 사용한 어떤 프레임에도 할당될 수 있다.
       : 페이지 번호(p)와 페이지 오프셋(d)로 구성
      

       

      
      : 페이징을 사용하면 프로세스의 마지막 페이지는 프레임 크기보다 작을 수 있어서 최악의 경우 한 프레임의 대부분이 낭비될 수 있는 내부 단편화 발생
      : 페이지 크기를 줄여서 내부 단편화를 줄일 수 있지만 페이지 테이블의 크기가 커짐
      : 각 프로세스마다 페이지 테이블을 유지, 보통 PCB에 유지되어서 context switching 시간을 증가시킨다.
      : 운영체제는 주기억장치를 관리하므로 할당의 자세한 내용을 알고 있어야 하는데, 이를 위해 프레임 테이블을 유지, 프레임 테이블에는 실제 프레임마다 하나의 항이 존재히며, 프레임의 할당여부, 할당되어 있을 경우에는 어떤 프로세스의 몇 번째 페이지가 할당되어 있는지를 유지
     
     
      ■ 페이지 테이블 하드웨어 구현
         : 보호비트나 PTLR(Page-Table Length Register)을 사용하여 페이지 테이블의 크기를 나타내어 보호

        - 전용 레지스터 집합을 사용
        : 페이지 테이블이 작은 경우에만 가능
        : 주기억장치의 특정 영역에 페이지 테이블을 저장하고, 이것을 가리키는 주소만 레지스터에 저장한다. 이 레지스터를 PTBR (Page-Table Base Register)이라 한다.
        : 주기억장치를 접근하기 위해 항상 두 번의 접근이 필요하므로 접근 속도가 느리다.

       
    - 전용 캐시를 사용하는 방법
       : 이 캐시를 TLB(Translation Look-aside Bufer)라 하며, 보통 캐시와 마찬가지로 연관 매핑 방식을 사용한다.
       : TLB는 크기가 제한적이며, 비용이 비싸므로 페이지 테이블에 일부만 가지고 있으며, 캐시처럼 먼저 TLB를 검색한 다음에 찾고자 하는 페이지 정보가 없으면 주기억장치에 있는 페이지 테이블을 참조한다.

      


     
     ■ 페이지 테이블 구조
      - 계층구조 페이징
      
      

      - 해시 페이지 테이블
      


      - 역 페이지 테이블
      : 주기억장치의 각 프레임에 대한 항만을 가지고 있어, 이 항에는 이 프레임에 저장되어 있는 가상주소와 이것을 사용하는 프로세스의 식별자로 구성되어 있다.

     
      - 공유 페이지
      : 공통 코드의 공유 가능성이 있지만 여러가지 조건이 필요하여 쉽지 않다.


    - 세그먼테이션
     : 보통 사용자들은 주기억장치를 연속적 선형 공간으로 생각하지 않고, 순서가 없는 다양한 크기의 세그먼트의 집합으로 생각하는데 세그먼테이션이 이런 사용자 관점을 지원해주는 주기억장치 관리 기법
     : 외부 단편화가 발생할 수 있다.
     : 세그먼트 테이블을 사용하여 세그먼트 주소와 물리적 주소 간에 매핑

     : 세그먼트 이름과 오프셋을 이용하여 주소를 지정, 컴파일러가 사용자 프로그램을 번역할 때 자동적으로 세그먼트를 구성

     
     
     


'Major > Operating System' 카테고리의 다른 글

운영체제 - Virtual Memory Management  (0) 2015.11.11
운영체제 - Deadlock  (1) 2015.11.11
운영체제 - Process synchronization  (0) 2015.11.10
운영체제 - CPU schedulering  (0) 2015.11.10
운영체제 - Thread  (0) 2015.11.10
  • 교착상태
    : 자원은 주기억장치 공간, CPU 시간, 파일, 입출력 장치 등
    : 프로세스는 여러 프로세스가 여러 자원에 대해 경쟁
    : 어떤 집합 내에 있는 모든 프로세스가 대기 상태이며, 이 집합 내에 있는 각 프로세스가 이 집합내에 다른 프로세스가 가지고 있는 자원을 기다리고 있으면 교착상태에 있다고 한다.




    - 데드락의 4가지 조건
     : 4가지 모두 충족되어야 교착상태가 발생(1, 3는 자원 관련, 2, 4는 시스템 관련)
     1. 상호배제(Mutual Exclusion)
      : 최소한 하나는 비공유 방식으로 점유되어야 한다. 비공유 방식의 점유란 한번에 하나의 프로세스만 자원을 사용할 수 있음을 말한다.
     2. 점유와 대기(Hold and Wait)
      : 프로세스는 최소한 하나의 자원을 점유하고 있고, 다른 프로세스가 점유하고 있는 다른 프로세스를 기다리고 있어야 한다.
     3. 비선점(No Preemption)
      : 점유된 자원은 강제로 해제될 수 없고, 프로세스가 자원의 사용을 끝마치고 자발적으로 해제할 때까지는 그 자원을 얻을 수 없어야 한다.
     4. 순환 대기(Circular Wait)
      : 다음을 만족하며 대기하는 프로세스의 집합 {P0, P1, P2 ... Pn}이 존재해야 한다. P0는 P1, P1은 P2, Pn은 P0가 점유한 자원을 기다리고 있다. 자원 순환 그래프에서 사이클을 가지지 않으면 데드락이 아니지만 만약 사이클을 가지면 데드락일 수도 있고 아닐 수도 있다. (자원 갯수에 따라)


    - 교착상태를 처리하는 방법
    1. Prevention
     : deadlock이 발생하는 4가지 조건 중 하나라도 없애는 것
    2. Avoidance
     : Deadlock이 일어날 수 있는 상황에 가지 않도록 자원 관리, 
    Banker’s algorithm
    3. Detection
     : Deadlock이 일어난 것을 확인하고 후 처리


'Major > Operating System' 카테고리의 다른 글

운영체제 - Virtual Memory Management  (0) 2015.11.11
운영체제 - Memory Management  (0) 2015.11.11
운영체제 - Process synchronization  (0) 2015.11.10
운영체제 - CPU schedulering  (0) 2015.11.10
운영체제 - Thread  (0) 2015.11.10
  • Race Condition
    : 여러 프로세스가 공통된 데이터를 조작할 때 결과가 접근 순서에 의해 결정되는 현상

  • Critical section
    : 프로세스의 코드의 일부분으로서, 다른 프로세스와 공동으로 사용하는 변수, 테이블, 파일 등을 변경하는 부분
    : 해결 방안
     1. 상호 배제(mutual exclusive) : 한 프로세스가 임계 구역에서 실행하고 있으면 어떤 프로세스도 임계 구역에 진입할 수 없어야 한다. SW로 가능하지만, 매우 복잡하여 HW로 대부분 보조
     2. 진행(progress) : 임계 구역을 실행하고 있는 프로세스가 없을 때, 몇 개의 프로세스가 임계 구역에 진입하고자 하면 이들의 진입 순서는 이들에 의해서만 결정되어야 한다. 또한 이 선택은 무한정 연기되어서는 안된다. 
     3. 한계 대기(bounded waiting) : 한 프로세스가 자신의 임계 구역에 진입하고자 요청을 한 후부터 이 요청이 허용될 때까지 다른 프로세스가 그들의 임계 구역에 진입할 수 있는 회수가 제한되어야한다.

     - Peterson's Solution (Dekker) : flag를 이용
     - Baker algorithm: 가게에 들어오는 손님들은 번호를 하나 받으며, 가장 낮은 번호를 받은 손님 순으로 서비스를 받는다. 그런데 모든 손님이 다른 번호를 받도록 보장할 수 없다. 만약 두 손님이 같은 번호를 받으면 이름 순으로 서비스를 받는다. 모두 다른 번호를 받도록 하기 위해서는 변호를 받는 것 자체가 임계 구역.

     - Bounded-Buffer problem
      

     - Readers and Writers problem
      

     - Dining-philosopher problem : 다익스트라가 제안, 다섯명의 철학자가 있다. 이들은 생각에 잠기거나 먹는 것 외에는 아무것도 하지 않는다. 철학자들은 원형 테이블에 앉아 있으며, 테이블 중앙에 밥이 있다. 그런데 젖가락이 다섯개 밖에 없다. 배가 고프면 철학자는 가장 가까이 있는 두개의 젖가락을 집는다. 철학자는 한 번에 하나의 젖가락만 집을 수 있으며, 옆 사람이 집고 있는 젖가락은 집을 수 없으며, 두 개의 젖가락을 모두 집어야 식사를 할 수 있다. 식사를 한 후에는 다시 두 개의 젖가락을 모두 내려놓고 생각에 잠긴다. -> 데드락 발생

     - Mutex
     : MUTual EXclusion으로 상호배제라고도 한다. Critical Section를 가진 스레드의 Running Time이 서로 겹치지 않게 각각 단독으로 실행되게 하는 기술이다. 다중 프로세스들의 공유 리소스에 대한 접근을 조율하기 위해 locking과 unlocking를 사용한다. 두 스레드가 동시에 사용할 수 없다는 의미.

     - Semaphore
     
    : 리소스의 상태를 나타내는 간단한 카운터

     
      ■ Busy waiting
       : 한 프로세스가 임계 구역에 있는 동안 다른 프로세스들은 임계구역에 진입하는 지속적인 loop 코드를 돌려야 한다.
       : 
    Busy waiting 을 하는 세마포어를 spinlock이라 한다.
       : spinlock은 문맥 전환이 필요없어 오래 동안 busy waiting을 하지 않는다면 효과적인 방법이다.
       : 성능저하를 초래할 수 있다 -> Semaphore

      ■ Blocking & Wake-up
       : 각 세마포어가 waiting queue에 할당
       : wait()로 block, signal()로 wake up 
       : wait와 signal을 반드시 원자적으로 수행

    - Mutex vs Semaphore 출처: http://ninako21.tistory.com/500
      : 세마포어는 뮤텍스가 될 수 있지만 뮤텍스는 세마포어가 될 수 없다.
      : 세마포어는 소유할 수 없는 반면 뮤텍스는 소유가 가능하며 소유주가 이에 대한 책임을 진다.
      : 뮤텍스의 경우 뮤텍스를 소유하고 있는 스레드가 이 뮤텍스를 해제할 수 있다. 하지만 세마포어의 경우 이러한 세마포어를 소유하지 않는 스레드가 세마포어를 해제할 수 있다.
      : 세마포어는 시스템 범위에 걸쳐 있고 파일 시스템상의 파일 형태로 존재한다. 반면 뮤텍스는 프로세스 범위를 가지며 프로세스가 종료될 때 자동으로 clean up 된다.
      : 가장 큰 차이점은 관리하는 동기화 대상의 갯수이다.
       뮤텍스는 동기화 대상이 오직 하나 뿐일 때, 세마포어는 동기화 대상이 하나 이상일 때 사용한다.


    - 모니터
      : 세마포어의 부적절한 사용으로 발생하는 에러를 해결하기 위한 높은 수준의 추상화 데이터 타입으로, 편리하고 효율적인 프로세스 동기화 메커니즘을 제공.
      



'Major > Operating System' 카테고리의 다른 글

운영체제 - Memory Management  (0) 2015.11.11
운영체제 - Deadlock  (1) 2015.11.11
운영체제 - CPU schedulering  (0) 2015.11.10
운영체제 - Thread  (0) 2015.11.10
운영체제 - Process  (0) 2015.11.09
  • CPU Scheduler
    : 다중 프로그래밍의 목적은 항상 실행할 수 있는 프로세스가 있도록 하여 CPU 사용 효율을 극대화하는데 있다.
    : CPU 스케줄러는 CPU가 유휴 상태가 되면 Ready queue에 있는 프로세스를 하나 선택해서 실행

    - CPU-I/O 버스트 주기
     : 프로세스는 실행되는 동안 CPU 실행과 입출력 대기 두 주기를 반복한다.
     : 계산 중심 프로세스는 적은 수의 매우 긴 CPU 버스트를 가지며, 입출력 중심 프로세스는 많은 수의 짧은 CPU 버스트를 가진다.
     



    - 비선점(Nonpreemptive) vs 선점(Preemptive)

      ■ 선점형 스케줄링
       : 어떤 조건이 만족되면 현재 실행중인 프로세스의 의사와 상관없이 그것의 실행을 중단하고 다른 프로세스를 CPU에 할당
        1. 프로세스가 실행중 상태에서 대기중 상태로 전환 (ex. 입출력 요청)
        2. 프로세스가 실행중 상태에서 준비 완료 상태로 전환 (ex. 인터럽트 발생)
        3. 프로세스가 대기중 상태에서 준비 완료 상태로 전환 (ex. 입출력 완료)
        4. 프로세스가 종료 

      ■ 비선점형 스케줄링
       : 프로세스가 CPU에 할당되면 그 프로세스가 종료되거나 대기중 상태로 전환될 때까지 CPU를 점유. 1, 4에서 스케줄링이 일어나면 비선점.

    - Dispatcher
     : 스케줄러가 선택한 프로세스를 CPU에 할당해주는 요소를 디스패처(Dispatcher)
     : 문맥 전환, 모드 전환
     : 디스패처가 하나의 프로세스를 중단하고 다른 프로세스를 실행하기까지 소요되는 시간을 디스패치 지연(dispatch 
    latency)

    - 스케줄링 기준
     : CPU 사용 효율, 처리율, 반환시간, 대기시간, 응답시간

    - 스케줄링 알고리즘
     ■ FCFS(First-Come First_Serverd)
       : 먼저 요청한 프로세스 순으로 스케줄링, FIFO 큐를 이용하여 쉽게 구현
       : 비선점 방식
       : Convoy effect 발생 (하나의 큰 프로세스가 CPU를 양보할 때까지 다른 모든 프로세스가 기다리는 현상)

     ■ 
    SJF(Shortest-Job-First) = SRTF
       : CPU 버스트 시간이 가장 짧은 프로세스 순으로 스케줄링

     ■ Priority Scheduling
       : 우선순위가 높은 프로세스에게 먼저 CPU를 할당
       : SJF도 우선순위 스케줄링 중 하나
       : indefinite blocking, starvation 현상 발생, 우선순위가 낮은 프로세스는 평생 실행 안되는 현상 -> aging 기법으로 해결

     ■ RR(Round-Robin)
       : 시분할 시스템에서 사용하는 알고리즘
       : time slice 단위로 시간이 경과될 때마다 현재 프로세스를 중단하고 다음 프로세스를 실행
       : Ready queue를 순환버퍼로 만들어 구현
       : 선점 방식
       : time slice 단위가 너무 크면 FCFS, 너무 작으면 Context switching 오버헤드가 큼

     ■ Multilevel Queue
      : 다중레벨 큐 스케줄링에서는 준비완료 큐를 여러 개의 큐로 나누어 사용한다.
      : 각 큐는 독자적인 스케줄링 알고리즘을 사용
      : 큐 간에는 별도 스케줄링 알고리즘을 사용


'Major > Operating System' 카테고리의 다른 글

운영체제 - Deadlock  (1) 2015.11.11
운영체제 - Process synchronization  (0) 2015.11.10
운영체제 - Thread  (0) 2015.11.10
운영체제 - Process  (0) 2015.11.09
운영체제 - 기초  (0) 2015.11.09
  • 스레드
    : 프로세스와 마찬가지로 CPU의 작업 단위, 경량 프로세스
    : 텍스트 부분, 데이터 부분, 다른 운영체제 자원은 같은 프로세스에 속한 다른 스레드와 공유, 스레드는 스레드 식별자, 프로그램 카운터, 레지스터 집합, 스택(함수 호출 처리에 필요한 메모리)
    : 모든 프로그램을 다중 스레드를 사용하도록 바꾼다고 하여 성능이 향상되는 것은 아님



- 프로세스 vs 스레드
 : 성능적인 관점의 차이
 : 프로세스처럼 독립적인 구조가 아니고 스레드들 사이에 공유하는 요소가 있다. -> 동기화 처리가 필요함
 : context switching 걸리는 시간이 프로세스보다 짧고, 오버헤드 저렴
 : 프로세스에 비해 생성 비용 저렴 (공유 영역은 제외하고 만드므로)
 : 캐시 메모리 활용 측면으로 넘어가면 그 비용 차이는 더 커짐



- 유저 스레드 vs 커널 스레드
 ■ 유저 스레드
  : 사용자 공간에서 스레드 라이브러리를 통해 제공
  : 커널의 지원 없이 스레드의 생성, 스케줄링, 관리를 제공 (모드변경 x)
  : 프로세스마다 자체적 스케줄링 알고리즘을 가질 수 있으나, 커널은 스레드 단위로 시분할 하지 않음
  : 커널이 단일 스레드일 때 프로세스의 하나의 스레드가 블록되면 전체 프로세스가 블록 -> 비동기식을 이용하여 극복

 ■ 커널 스레드
  : 운영체제가 직접 지원
  : 커널이 스레드의 생성, 스케줄링, 관리 담당 (모드변경 필요)
  : 하나의 스레드가 블록되어도 같은 프로세스에 있는 다른 스레드를 계속 실행


- 다중 스레드 모델


- 스레드 풀
 : 스레드 풀은 프로세스가 생성할 수 있는 스레드의 수를 적절하게 관리하기 위해 사용되는 메커니즘
 : 스레드를 필요할 때마다 생성하지 않고 프로세스가 시작될 때 적정한 수의 스레드를 생성하여 스레드 풀에 대기하도록 한다. 스레드가 필요하면 이 풀에 있는 하나 스레드를 활성화하여 실행되며, 실행이 끝나면 다시 스레드 풀에서 대기한다. 만약 스레드 풀에 더 이상 활성화할 스레드가 없으면 처리 요청은 있을 때까지 대기하게 된다.


'Major > Operating System' 카테고리의 다른 글

운영체제 - Process synchronization  (0) 2015.11.10
운영체제 - CPU schedulering  (0) 2015.11.10
운영체제 - Process  (0) 2015.11.09
운영체제 - 기초  (0) 2015.11.09
컴퓨터구조  (1) 2015.11.09
  • 프로세스 
    : 현재 실행 중인 프로그램
    : 입출력 중심(I/O-bound) 프로세스: 계산보다는 입출력을 많이 하는 프로세스
    : 계산 중심(CPU-bound) 프로세스: 입출력보다는 계산을 많이 하는 프로세스

    - 프로세스 메모리 구조
     : 리눅스 기준으로 1GB Kernel 영역, 3GB User 영역

       

     ① text(code) 영역

      : 코드 자체를 구성하는 메모리 영역으로 Hex파일이나 BIN파일 메모리

      : 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역

       

     ② data 영역

      : 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장된다.

      : 초기화 된 데이터는 data 영역에 저장되고, 초기화 되지 않은 데이터는 BSS (Block Stated Symbol) 영역에 저장된다.

      : 프로그램이 실행 될 때 생성되고 프로그램이 종료 되면 시스템에 반환

      : 함수 내부에 선언된 Static 변수는 프로그램이 실행 될 때 공간만 할당되고, 그 함수가 실행 될 때 초기화

       

    Q) data영역과 bss 영역을 구분 하는 이유?

       초기화가 되지 않는 변수는 프로그램이 실행될때 영역만 잡아주면 되고 그 값을 프로그램에 저장하고 있을 필요는 없으나 초기화가 되는 변수는 그 값도 프로그램에 저장하고 있어야 하기때문에 두가지를 구분해서 영역을 잡는것이다. 이것이 bss영역을 구분하는 이유이다. 따라서 이러한 bss영역 변수들은 많아져도 프로그램의 실행코드 사이즈를 늘리지 않는다.

       

     ③ heap 영역

      : 필요에 의해 동적으로 메모리를 할당 하고자 할 때 위치하는 메모리 영역으로 동적 데이터 영역이라고 부르며, 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.

      : 이 영역에 데이터를 저장 하기 위해서 C는 malloc(), C++은 new() 함수를 사용한다.

       

     ④ stack 영역

      : 프로그램이 자동으로 사용하는 임시 메모리 영역이다.

      : 지역(local) 변수, 매개변수(parameter), 리턴 값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역이다.

      : 함수 호출 시 생성되고, 함수가 끝나면 시스템에 반환 된다.

      : 스택 사이즈는 각 프로세스마다 할당 되지만 프로세스가 메모리에 로드 될 때 스택 사이즈가 고정되어 있어, 런타임 시에 스택 사이즈를 바꿀 수는 없다.

      : 명령 실행시 자동 증가/감소 하기 때문에 보통 메모리의 마지막 번지를 지정 한다.


    ∴ H
    EAP overflow - heap이 위에서부터 주소값을 채워져 내려오다가 stack영역을 침범하는 경우.

    ∴ STACK overflow - stack영역이 heap을 침범.


    - 프로세스 상태




    ① NEW 
     : 프로세스가 생성 중 (ex. log on, 프로그램의 실행)

    ② Running 
     : 프로세스가 실행 중 (프로세서에 상주하고 있는 상태)

    ③ Waiting
     : 프로세스가 어떤 사건을 기다리고 있는 상태

    ④ Ready
     : 프로세스가 프로세서에 할당되기를 기다리고 있는 상태

     Terminated

     : 프로세스의 실행이 종료된 상태



    - PCB(Process Control Block)

     
     : 프로세스마다 존재하는 프로세스 제어 블록(태스크 제어 블록)

     : 프로세스 상태, 프로그램 카운터, CPU 레지스터, CPU 스케줄링 정보, 주기억장치 관리 정보, 회계 정보, 입출력 상태 정보 등



    - 프로세스 스케줄링

     : 여러종류의 큐로 관리, 일반적으로 연결 리스트로 구현, 
     : 큐의 헤더는 리스트에 있는 첫번째와 마지막 PCB를 가리키는 포인터를 가지고 있음.
     : 각 PCB는 다음 PCB를 가리키는 포인터를 필드로 가지고 있음.

     ■ Job queue : 프로세스가 시스템에 처음 들어와서 대기하는 큐

     ■ Ready queue : 주기억장치에 적재되어 실행을 기다리는 프로세스를 유지하는 큐

     ■ Device queue : 장치를 사용하기 위해 기다리는 큐, 각 장치는 자신만의 장치 큐를 가지고 있다.

     ■ Waiting queue : 특정한 사건마다 그 사건을 기다리는 프로세스를 유지하는 큐


       


    - 프로세스 스케줄러

     : 각 큐마다 다음 차례의 프로세스를 결정하여 주는 스케줄러

     ■ Long-term scheduler (Job scheduler) 
     : 다중 프로그래밍의 정도를 결정

     : 입출력 중심과 계산 중심 프로세스를 적절한 비율로 선택
     : 디스크의 job pool -> Ready queue가 수용하지 못하는 작업은 job pool에 유지
     : 유닉스는 사용 x


      Short-term scheduler (CPU scheduler)

     : 준비완료 큐에서 다음에 CPU에 할당하여 실행할 프로세스를 결정

     : Ready queue -> CPU


     ■ Medium-scheduler
     : 시분할시스템에서 프로세스를 메모리에서 디스크로 옮겨 당분간 실행되지 못하도록 하는 경우가 있다. 이것은 다중 프로그래밍의 정도를 조절하여 프로세스 혼합을 향상시키거나 메모리 요구 사항을 충족시키기 위함이다. 이것을 담당하는 스케줄러

     

    - Context switch
     : 실행 중인 프로세스의 상태를 보관하고, 새로운 프로세스의 상태 CPU에 적재하는 과정
     : 프로세스의 문맥(context)은 프로세스의 PCB에 유지
     : 문맥 교환에 소요되는 시간은 순수 오버헤드 (H/W에 의존)
     : 극복 방안 특수 명령어, 레지스터 집합, 스레드 사용

       



    - 프로세스 생성
     : 프로세스는 수행 도중에 새로운 여러 프로세스를 생성, 이 때 프로세스를 생성하는 프로세스를 부모(parent) 프로세스라 하고, 생성된 프로세스를 자식(child) 프로세스라 함.
     : 자식프로세스는 부모 프로세스의 주소 공간의 복사본이 할당 or 자신의 공간에 적재할 프로그램을 가짐
     : 각 프로세스는 독특한 정수값인 프로세스 식별자(process identifier = pid)에 의해 식별

    - 프로세스 종료
     : 자신의 마지막 문장을 수행하면 종료, 운영체제에게 자신의 삭제 요청
     : 자식은 부모에게 결과 데이터를 전달할 수 있다.
     : 부모가 종료되면 모든 자손 프로세스들도 종료
     : 유닉스는 고아 프로세스가 새부모가 됨

    - 프로세스 간 통신 (IPC, InterProcess-Communication)
     : 프로세스가 같은 주소 공간을 공유하지 않아도 프로세스 간에 통신하고 그들의 행동을 동기화해줄 수 있는 메커니즘을 제공 
     : 
    Shared Memory, Message Passing 방식 -> 동기화 문제
     : 공유메모리 방식은 소비자, 생산자가 형태
     : 메세지 전달 방식으로 직접 통신과 메일박스나 포트로 전달하는 간접 통신




    - 원격 프로시저 호출 (RPC, Remote Procedure Call)
     : 원격 프로시저 호출은 원격에 있는 프로시저를 마치 지역 프로시저를 호출하듯이 호출할 수 있도록 함
     : 소켓보다는 상위 레벨의 통신 메커니즘
     : Stub을 이용하여 복잡한 내부 통신을 사용자로부터 숨겨줌. 


'Major > Operating System' 카테고리의 다른 글

운영체제 - Process synchronization  (0) 2015.11.10
운영체제 - CPU schedulering  (0) 2015.11.10
운영체제 - Thread  (0) 2015.11.10
운영체제 - 기초  (0) 2015.11.09
컴퓨터구조  (1) 2015.11.09
  • 운영체제란?
    - 컴퓨터 하드웨어를 관리하는 프로그램
    - 응용프로그램의 토대를 제공해주는 프로그램
    - 컴퓨터의 사용자와 컴퓨터 하드웨어 사이에 중간 매개체 역할을 해주는 프로그램
    - 자원 관리자: CPU 시간, 메모리 공간, 파일 저장 공간, 입출력 장치
    - 제어프로그램: 사용자 프로그램의 실행을 관리하고, 오류와 컴퓨터 오용을 방지

     
    Com abstract layers kor.png 



    ∴ 커널? 
    커널은 운영 체제의 핵심 부분이므로, 커널의 역할 역시 운영 체제의 핵심 역할이라 할 수 있다. 보안, 자원 관리(프로세서 관리, 프로세스 관리, 메모리 관리, 파일 시스템 관리, 디바이스 제어, 네트워크 관리)추상화 등

    ∴ 쉘? 명령어 해석기로 사용자와 운영체제 간에 인터페이스로 사용자로부터 명령을 받아 실행


  • 메인프레임 시스템
    - 일괄처리(batch processing) 시스템
     : 초창기 시스템, 운영체제는 항상 메모리에 상주
     : 처리속도를 향상하기 위해 유사한 요구를 필요로 하는 작업을 함께 모아서 일괄 처리(batch processing)
     : 기계적 입출력 장치가 전자적 장치의 속도보다 상대적으로 느려 CPU 유휴 시간 증가
     : 직접 접근(direct access)이 가능한 디스크의 도입으로 작업 스케줄링(job scheduling), 다중 프로그래밍(multiprogramming)이 가능해짐

    - 다중프로그램(multiprogramming) 시스템
     : 다중 프로그래밍이란 여러 개의 프로그램을 동시에 메모리에 적재하여 하나의 프로그램이 대기상태가 되면 그 동안 다른 프로그램을 실행하는 방식
     : 입출력과 프로그램의 실행을 병행으로 수행할 수 있어 CPU의 사용 효율 증가
     : 디스크에 있는 작업 저장소(job pool)에서 작업을 선택하여 메모리로 옮기는 것을 작업 스케줄링(Job scheduling)이라 함.
     : 실행중 인 작업이 대기 상태가 되었을 때 메모리에 있는 작업 중 하나를 선택하여 CPU에 할당하는 것은 CPU 스케줄링(CPU scheduling)이라 함.
     : 여러 프로그램이 동시에 메모리에 상주하므로 메모리 관리가 복잡

    - 시분할(time sharing) 시스템 = 멀티태스킹(multitasking) 시스템
     : 다중 프로그래밍을 제공하는 일괄처리 시스템은 CPU의 사용 효율은 높였지만 사용자와 컴퓨터간에 상호작용은 제공하지 못함.
     : 정해진 시간이 되면 무조건 다음 순서의 작업을 실행하는 방식, 교대하는 시간이 매우 짧아 프로그램이 실행되는 동안 사용자는 컴퓨터와 상호작용 가능
     : 대화식 컴퓨터 시스템(interactive computer system), 응답시간이 짧아야함
     : 시분할 시스템은 여러 사용자가 동시에 컴퓨터를 사용할 수 있게 해줌.
     : 메모리에 적재되어 실행중인 프로그램을 프로세스(process)라 한다.
     : 많은 사용자의 프로그램을 동시에 수행하기 위해서는 주기억장치의 용량으로는 부족 -> 디스크를 주기억장치의 보조 저장장치로 활용하며, 현재 가장 널리 사용되는 기법은 가상 메모리(virtual memory)

  • 다중프로세서(multiprocessor system) 시스템 = 병렬 시스템(parallel system) or 밀결합 시스템(tightly coupled system)
     : 컴퓨터 버스, 클럭, 메모리 등을 공유하는 둘 이상의 프로세서를 사용하는 시스템
     : 처리율 증가 (N개의 프로세서를 사용한다고 처리율이 N배로 증가하는건 아님)
     : 신뢰성 증가, 결함 허용(fault tolerancee)에 유리하다. 계속 수행되는 하드웨어의 수에 비례하여 서비스를 계속 제공할 수 있는 능력을 우아한 성능 저하(graceful degradation)라 한다.
     : 대칭형 다중처리(가장 많이 사용), 비대칭형 다중처리(각 프로세서 간 주/종 관계 존재)

  • 분산시스템, 집단 시스템, 실시간 시스템, 휴대용 시스템 등

  • 컴퓨터 부팅 과정

    ① 
    전원 ON

    ② 
    메인보드의 ROM-BIOS에 있는 BIOS프로그램 실행
     - 하드웨어 오류 검사 (POST: Power-On Self Test)
     - 부팅매체 탐색
     - 1차 Boot loader 로딩 [Boot loader를 0:7C00위치의 메모리(RAM)에 적재]
     : 주하드디스크(첫 번째 부팅 장치 HDD)의 첫 번째 섹터인 MBR(Master Boot Record)의 내용을 메모리(RAM)에 로딩한 후 제어권을 넘깁니다. 일반적으로 512byte에 Boot loader 코드를 모두 적재하기 힘들기 때문에 기본적으로 필요한 부분만 MBR에 저장하고, 이를 통해서 2차 Boot loader를 호출합니다.

    ③ 
    프로세서(CPU)가 Boot loader 코드 실행

    ④ 
    해당 운영체제의 2차 Boot loader 로딩 및 실행

    ⑤ Kernel 로딩

    ⑥ 프로세서(CPU)가 Kernel 실행
     - 초기화 및 시스템 설정
     - ID 1번 프로세스(초기화 프로세스) 실행

    ⑦ 하드웨어나 소프트웨어 Interrupt 발생을 기다림

    ⑧ OS 동작

  • OS - 인터럽트 기반
    - H/W interrupts : external event
     : CPU에 특정 신호를 보내어 인터럽트의 발생을 알림

    - S/W interrupts - trap (or exception)
     : internal event
     : 시스템 호출(system call)이라는 특정 연산을 실행하여 일부로 발생시키거나 오류(0 나누기, 부적합한 주기억장치 접근)때문에 자발적으로 발생

    ■ Trap vs Interrupt
     : CPU관점에서 internal event인지 external event인지

    - 기본적인 인터럽트 동작원리
     ① 현재 작업을 멈추고, 현재 상태를 보관
     ② 인터럽트의 종류 분석
     ③ 특정 인터럽트 수행(인터럽트 벡터 활용)
     ④ 보관된 상태를 원상복귀하고 멈춘 작업을 재개

    - Polling vs Vectored interrupt system vs DMA
     : 폴링방식은 정해진 시간 또는 순번에 상태를 확인해서 상태 변화가 있는지 없는지를 체크 하는 방식
     : 인터럽트 벡터 시스템은 인터럽트가 발생했을 때, 현재 작업을 멈추고 그 인터럽트를 처리할 수 있는 서비스 루틴들의 주소를 가지고 있는 공간(인터럽트 벡터)을 찾아서 해당 인터럽트를 수행한다.

    - I/O interrupt
     : I/O를 시작하기 위해 CPU는 장치 제어기 내에 있는 레지스터에 적절한 데이터를 적재
     : 제어기는 이것을 검사하여 어떤 행동을 취할지 결정
     : 입출력의 수행이 끝나면 보통 인터럽트를 통해 CPU에게 통보
     : 동기식 입출력, 비동기식 입출력
     : 병행 처리를 위해 장치 상태 테이블을 유지
     
    인터럽트 기반의 I/O 작업은 대량의 데이터 이동에 큰 오버헤드 발생

     ■ DMA (Direct Memory Access)
     : CPU의 관여없이 직접 주기억장치로 이동하며, 인터럽트는 바이트 단위가 아닌 블록 단위로 발생



  • 주기억장치 메모리 할당 방식


  • 하드웨어 보호
    : 다중 프로그래밍 환경에서는 하나의 프로세스의 오류가 다른 프로세스에게도 영향
    : 따라서 운영체제는 이런 오류가 다른 프로세스에 영향을 주지 않도록 해야함
    : 오류 발생 시 하드웨어는 트랩을 발생시킨 프로세스를 강제로 종료시키고 적절한 오류 메시지 출력

     - 듀얼 모드
     : mode bit로 OS영역과 User영역에서 실행 해야하는 것을 구별
     : Kernel mode vs User mode : H/W의 지원이 요구 됨
     : 문제를 일으킬 소지가 있는 명령어는 특권 명령으로 분류하고 이 명령은 커널 모드에서만 수행되도록 하여 프로세스를 보호
     : 사용자는 운영체제만이 수행할 수 있는 명령의 수행을 부탁하여 운영체제와 상호작용, 이런 요청을 보통 시스템 호출이라 하며, 하드웨어는 이런 시스템 호출을 소프트웨어 인터럽트로 간주한다.
     : 예) Set value of timer (Users/Kernel)
          Read the clock (Users/Kernel)
          Turn off interrupts (Users/Kernel)
           Access I/O devices (User/Kernel)
           Issue a trap instruction (User/Kernel)

  • 주기억장치 보호
     : 기준 레지스터(base register), 한계 레지스터(limit register) 이용

  • 중앙처리장치 보호
     : 운영체제가 항상 제어권을 확보할 수 있도록 해야함.

     - Timer
     : 일정시간이 경괃되면 타이머는 인터럽트를 발생하여 운영체제에 제어권을 넘긴다.
     : 시분할을 구현하기 위해서도 사용

  • Program vs Process
     : 프로세스는 현재 실행 중인 프로그램(프로그램이 주기억장치에 적재된 상태)
     : 실행상태에 있는 프로그램의 인스턴스


'Major > Operating System' 카테고리의 다른 글

운영체제 - Process synchronization  (0) 2015.11.10
운영체제 - CPU schedulering  (0) 2015.11.10
운영체제 - Thread  (0) 2015.11.10
운영체제 - Process  (0) 2015.11.09
컴퓨터구조  (1) 2015.11.09
  • 컴퓨터의 주요 구성요소
     

    - 중앙처리장치(CPU) = 프로세서(processor)

     : '프로그램 실행', '데이터 처리' 중추적인 기능, 사람의 두뇌 역할을 하는 컴퓨터의 주요장치
     : Data처리 길이에 따라 32비트와 64비트 CPU로 구분

     - 기억장치

     ■ 캐시기억장치 : CPU와 주기억장치 간의 속도 차를 보정해주기 위해 사용하는 고속처리가 가능한 기억장치 

     ■ 주기억장치(main memory)
     : CPU 가까이 위치하며, 반도체 기억장치 칩들로 구성 고속 액세스
     : CPU가 유일하게 직접 접근할 수 있는 기억장치
     : 한 구성 단위를 워드(word) = 명령어 단위

     : 가격이 비싸고 면적을 많이 차지 -> 저장 용량의 한계
     : 영구 저장 능력이 없기 때문에, 일시적 저장장치로만 사용
     : 최근에는 비휘발성 고속 액세스 메모리 개발하여 부분적으로 사용 중

     ■ 보조저장장치(auxiliary storage device) 
     : 2차 기억장치(secondary device)
     : 기계적인 장치가 포함되기 때문에 저속 액세스
     : 저장 밀도가 높고, 비트당 비용이 저가
     : 영구 저장 능력을 가진 저장장치 : 하드 디스크, 플래시 메모리 등

     ■ 메모리 계층구조도


     ■ ROM(Read Only Memory)
     : 영구 저장이 가능한 반도체 기억장치
     : 읽는 것만 간능하고, 쓰는 것은 불가능
     : 시스템 초기화 및 진단 프로그램(PC의 BIOS 프로그램 등)
     
     : 빈번히 사용되는 함수들을 위한 서브루틴들
     : 제어 유닛의 마이크로 프로그램

     - 입출력장치(I/O device)

     : 입력장치(input device), 출력장치(output device)
     : 사용자와 컴퓨터간의 대화를 위한 도구( 키보드, 모니터 등)
     : 주요 특징 중 하나는 각 입출력장치는 사용 Data 크기도 다르고 명령어도 달라 CPU와 직접 연결하여 사용하기에는 비효율적이다. 그래서 각 I/O 장치별 제어기가 있어 CPU와의 통신을 통해 장치의 동작을 제어하고 Data를 제어한다.


  • CPU와 기억장치, I/O장치의 접속


    : CPU와 시스템 내의 다른 요소들 사이에 정보를 교환하는 통로가 되는 시스템버스를 통해 정보 소통
    : 주소버스, 데이터버스, 제어버스로 구성


  • 폰 노이만 구조 vs 하버드 구조

    폰 노이만 아키텍처

    하버드 아키텍처

     


     


     : 명령어와 데이터 메모리 구분 없음
     : 공용메모리로 구현비용 저렴
     : 단순한 하드웨어 구조, 구현 간단
     : 병목현상 발생명령어를 읽을 때 데이터를 읽을 수 없음
     : 서로 다른 메모리에 명령어와 데이터 저장
     :
    병목현상 해결, 명령어 읽기/쓰기 병행 가능으로 성능 향상
     :
    버스 시스템의 설계 복잡, 공간소비 많음
     : H/W
    적 구조로 구현비용 높음





















  • 명령어의 기본구조


     

     연산코

     : CPU가 처리할 연산내용이 저장되는 부분으로 4bit 공간으로 구성되어 있으면 2^4 즉 16개의 연산을 할 수 있다.
     : Operation 지정, 산술/논리/시프트 연산, Micro Operation들의 집합

     오퍼랜드

     : OP Code가 사용할 Data의 주소 혹은 Data를 저장하는 저장장소이며 여러 가지 활용방식이 존재
     : 데이터(피연산자, Operand) 저장, 또는 레지스터나 메모리의 주소를 지정

     I

     : Addressing 모드 비트
     : 주소지정방식을 식별
     : I=1 이면 간접주소 지정방식, 0 이면 직접주소 지정방식
     : 프로세서마다 다름(점선으로 표시한이유)


  • 전자계산기 명령어 집합 구조, CISC vs RISC vs EISC






  • 명령어 파이프라인


    : 명령어의 처리 과정을 여러 단계로 세분화해서 동시에 서로 다른 작업들이 수행되도록 하여 병렬성을 높이는 기법
    : CPU의 프로그램 처리 속도를 높이기 위하여 CPU 내부 하드웨어를 여러 단계로 나누어 동시에 처리하는 기술


'Major > Operating System' 카테고리의 다른 글

운영체제 - Process synchronization  (0) 2015.11.10
운영체제 - CPU schedulering  (0) 2015.11.10
운영체제 - Thread  (0) 2015.11.10
운영체제 - Process  (0) 2015.11.09
운영체제 - 기초  (0) 2015.11.09

+ Recent posts