• 프로세스 
    : 현재 실행 중인 프로그램
    : 입출력 중심(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

+ Recent posts