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