프로그래머의 삶 Programmer's Life/개념과 상식의 이야기? Concept Vs Common sense?

정보보안기사 산업기사 - 운영체제 이론 정리

Oliver's World 2013. 10. 15. 19:59
728x90

* 운영체제의 발전
 1세대 - 일괄처리
 2세대 - 다중프로그래밍, 시분할, 다중처리, 실시간
 3세대 - 다중모드
 4세대 - 분산처리
 
* 프로세스 제어블록 (PCB)
 - 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓은 곳
 - 각 프로세스가 생성될 때마다 PCB가 생성되고, 완료되면 PCB는 제거
 - 운영체제에게 프로세스에 대한 정보를 제공해 주는 자료구조 테이블
 - 부모 프로세스와 자식 프로세스는 PCB를 공유하지 않는다.
 - 저장정보 : 프로세스 현 상태, 우선순위, 식별자, 레지스터 저장장소, 관련 레지스터 정보, 할당된 자원에 대한 포인터

 

* 태스크(프로세스, 스레드) 상태 전이도
 1) 실행상태 ( Running )
  - 프로세스가 CPU를 차지하여 실행중인 상태
 2) 준비상태 ( Ready ) 
  - 프로세스가 CPU를 사용하여 실행될 수 있는 상태
 3) 대기상태 ( wait, Block )
  - 어떤 사건이 발생하기를 기다리는 상태
 4) 디스패치 ( Dispatch )
  - 준비 상태에서 대기하고 있는 프로세스 중 하나가 스케쥴링 되어 CPU를 할당 받아 실행상태로 전이하는 것
 5) 타이머종료 ( Timer run out )
  - CPU를 할당받아 실행중인 프로세스가 할당시간을 초과하면 CPU를 다른 프로세스에게 양도하고, 자신은 준비 상태로 전이되는 것
 6) 블록 ( Block )
  - 실행중인 프로세스가 지정된 시간 이전에 다른 작업을 위해 스스로 CPU를 양도하고, 대기 상태로 전이되는 것

* 스케쥴링 기법
 1) 선점방식
  - 우선순위가 높은 다른 프로세스가 할당된 CPU를 강제로 빼앗을 수 있는 방식
  - 빠른 응답시간을 요구하는 대화식 시분할 시스템에 적합
  - 많은 오버헤드를 초래
  - 라운드로빈, SRT, MGQ 알고리즘
 
  * 라운드 로빈
   - 타이머 인터럽트를 사용해서 모든 프로세스에게 일정시간 만큼만 CPU를 할당하는 방식
   - 대화식 시분할 시스템을 위해 고안된 방식
   - 할당되는 시간이 클 경우 FIFO 알고리즘과 같아지고, 할당되는 시간이 작을 경우 문맥교환 및 오버헤드가 자주 발생
   - 타이머 인터럽트를 처리하는 오버헤드를 감수해야한다.
  
  * SRT알고리즘
   - 수행도중 나머지 수행시간이 적은 작업을 우선적으로 처리하는 방식
   - 작업처리는 SJF와 같으나 이론적으로 가장 작은 대기시간이 걸린다.
   - 기아현상(Starvation) 이 발생할 수 있따.
  
  * MFQ알고리즘
   - 하나의 준비 상태 큐를 통해서 여러 개의 피드백 큐를 걸쳐 일을 처리하는 방식
   - 작업들은 상위 큐에서 하위 큐로 혹은 에이징기법에 의해 상위 큐로 이동할수 있다.
   - 오래 실행된 프로세스는 CPU를 양도하고, 우선순위가 낮은 하위 큐로 이동한다.
 
 2) 비선점 방식
  - 프로세스에게 이미 할당된 CPU를 강제로 빼앗을 수 없고, 사용이 끝날때까지 기다려야 하는 방식
  - 모든 프로세스들에 대한 요구를 공정히 처리하기 때문에 응답시간의 예측이 용이하다.
  - 짧은 작업이 긴 작업을 기다리는 경우가 발생
  - FIFO, SJF, HRN, 우선순위, 기한부 스케쥴링
 
    * FIFO, FCFS 알고리즘
     - 작업이 시스템에 들어온 순서대로 수행하는 방식
     - 응답시간 차가 적기 때문에 작업 완료시간의 예측이 용이
     - 중요하지 않은 작업이 중요한 작업을 기다리게 할 수 있으므로 대화식 시스템에는 적합하지 않다.
   
    * SJF, SPN 알고리즘
     - 작업이 끝나기까지의 실행시간 추정치가 가장 적은 작업을 먼저 실행시키는 방식
     - FIFO 알고리즘보다 평균 대기시간이 작지만 긴 작업의 경우 FIFO 기법보다 더 크고 예측은 더욱 어렵다
     - 작업들의 평균 대기시간이 최소가 되는 최적의 스케쥴링
     - 차기 CPU시간을 알기 어렵고, 긴 작업이 너무 오래 대기상태에 있을 가능성이 크다.
     - 계속 길이가 짧은 작업이 준비 큐에 들어올 시 기아현상(Starvation)이 발생가능
     - 기아현상(Starvation)은 오랫동안 기다린 프로세스에게 우선순위를 높여 처리하는 에이징기법을 사용하여 해결가능
    
    * HRN 알고리즘
     - SJF알고리즘의 단점(긴 작업과 짧은 작업간의 지나친 불평등)을 보완하는 ㅏㅂㅇ식
     - 비선점 방식으로 최고 응답률을 갖는 프로세스를 선택
     - 짧은 작업 일수록 응답이류(Response Ratio)의 값이 커짐으로 입출력 프로세스에게 유리
     - 응답율 계산은 ( 대기시간 + 서비스시간 ) / 서비스 시간
    
    * 우선순위 알고리즘
     - 우선순위를 할당해 높은 순서대로 처리하는 방식
    
    * 기한부 알고리즘
     - 프로세스에게 일정한 시간을 주어 그 시간 안에 프로세스를 완료하도록 하는 방식
    
* 기아현상(Starvation)
 - 시스템 부하가 많아서 낮은 등급에 있는 준비 큐에 있는 프로세스가 무한정 기다리는 현상

* 에이징기법(Aging)
 - 기아현상을 해결하기 위한 기법으로 오랫동안 기다린 프로세스에게 우선순위를 높여줌으로서 처리
 
* 스풀링 ( Spooling )
 - 저속의 입출력장치와 고속의 CPU간의 속도차이를 해소하기위해 나온 방법으로 디스크 이용

* 버퍼링 ( Buffering )
 - 저속의 입출력 장치와 고속의 CPU간의 속도차이를 해소하기 위해 나온 방법으로 주기억 장치 이용
 
* 스풀링과 버퍼링과의 차이
 - 버퍼링은 입출력 채널과 프로세서가 동시에 버퍼 엑세스 불가하며, 스풀링은 작업 계산과 입출력이 동시에 수행
 
* 문맥교환 ( Context Switching )
 - 스케쥴링에 따라 실행중인 스레드를 교체할 때 교체되는 스레드의 상태를 기억하고, 새로운 스레드의 이전실행상태를 재복구하여 처리기를 넘겨주는 일련의 작업
 
* 인터럽트 ( Interrupt )
 - 시스템에서 발생하는 예외적인 사건을 신속히 처리하기 위한 기법
 1) SVC ( SuperVisor Call ) 인터럽트 - 입출력 수행, 기억장치 할당, 오퍼레이터와의 대화 등을 위하여 발생
 2) 프로그램 검사( Program Check ) 인터럽트 - 수행중인 프로그램에서 0으로 나누어 연산, 허용되지 않는 명령어의 수행, 스택의 오버플로우등과 같은 잘못이 있을 때 발생
 3) 기계검사(Machine Check) 인터럽트 - 컴퓨터 자체 내의 기계적인 장애나 오류로 인하여 발생
 4) 외부(External) 인터럽트 - 시스템 타이머에서 일정한 시간이 만료된 경우나 오퍼레이터가 콘솔상의 인터럽트 키를 입력한 경우 발생
 
* 교착상태의 발생조건
 1) 상호배제 ( Mutual Exclusion )
  - 프로세스들이 각각 필요 자원에 대해 배타적 통제권을 요구할 때를 의미
 2) 점유와 대기 ( Hold & Wait )
  - 프로세스가 다른 자원을 요구하면서 자신에게 할당된 자원을 해제하지 않을 때를 의미
 3) 비 중단 ( Non Preemption )
  - 프로세스에 할당된 자원을 끝날 때까지 해제할 수 없을 때를 의미
 4) 환형대기 ( Circular Wait )
  - 프로세스들이 순환을 이루어서 존재하여야 하며, 이를 구성하는 각 프로세스는 순환 내의 이전 프로세스가 요청하는 자원을 점유하고, 다음 프로세스가 점유하고 있는 자원을 요구할 때를 의미

 

* 교착상태 해결 방안
 1) 예방( Prevention )  
  - 교착상태의 필요조건을 붖어함으로써 교착상태가 발생하지 않도록 미리 예방
 2) 회피 ( Avoidance )
  - 교착상태 가능성을 배제하지 않고, 적절하게 피해나가는 방법
 3) 탐지( Detection )
  - 교착상태 발생을 허용하고, 발생 시 원인을 규명하여 해결하는 방법
 4) 복구( Recovery )
  - 교착상태 발견 후 환형 대기를 배제시키거나 자원을 중단하는 메모리 할당 기법

 

* 단편화 해결 방법
 1) 통합( Coalescent) 기법 
  - 주기억장치 내에 인접해 있는 단편화된 공간을 하나의 공간으로 통합하는 기법
 2) 압축( Compaction ) 기법 ( 쓰레기 수집, 집약 )
  - 주기억 장치 내에 분산되어 있는 단편화된 빈 공간을 결합하여 하나의 큰 가용공간을 만드는 기법
 3) 페이징( Paging )
  - 가상기억장치에 보관되어 있는 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후 나눠진 프로그램을 동일하게 나눠진 주기억장치의 영역에 적재시켜 실행
  - 내부 단편화는 발생하는 특징
 4) 세그먼테이션( Segmentation )
  - 가상기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행시키는 기법
  - 외부단편화가 발생하는 특징

 

* 주기억장치 할당기법
 1) 스와핑( Swapping ) 
  - 하나의 프로그램 전체를 주기억장치에 할당하여 사용하다가 필요에 따라 다른 프로그램과 교체하는 방법
 2) 오버레이( Overlay )
  - 실행되어야 할 작업의 크기가 커서 사용자 기억공간에 수용될 수 없을 때 작업의 모든 부분들이 동시에 주기억장치에 상주해 있을 필요가 없을 때 작업을 분할하여 필요한 부분만 교체하는 방법

* 가상기억장치의 성능에 영향을 미치는 요인
 1) 워킹 셋( Working Set )
  - 프로세스가 일정시간 동안 자주 참조하는 페이지들의 집합으로 자주 참조되는 워킹셋을 주기억장치에 상주시킴으로써 페이지 부재 및 페이지 교체 현상을 줄일 수 있다.
 2) 스래싱 ( Thrashing )
  - 프로세스의 처리시간보다 페이지 교체시간이 더 많아지는 현상
 3) 지역성( Locality )
  - 프로세스가 실행되는 동안 일부 페이지만 집중적으로 참조하는 성질
  1> 시간(Temporal) 지역성 - 최근 참조된 기억장소가 가까운 장래에도 계속 참조될 가능성이 높다.
  2> 공간(Spatial) 지역성 - 하나의 기억장소가 참조되면 그 근처의 기억장소가 계속 참조될 가능성이 높다.
 
* 페이지교체 알고리즘
 1) OPT(OPTimal replacement) - 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 기법
 2) FIFO - 주기억장치 내에 가장 오래 있었던 페이지를 교체
 3) LRU(Least Recently Used) - 최근에 가장 오랫동안 사용하지 않은 페이지를 교체, 각 페이지별 계수기를 두어 현 시점에서 볼 때 가장 오래전에 사용된 페이지를 교체
 4) LFU(Least Frequency Used) - 사용횟수가 가장 적은 페이지를 교체하는 기법
 5) NUR(Not Used Recently) - 최근 사용하지 않은 페이지를 교체하는 기법, 최근 사용여부 확인위해 각 페이지마다 참조 비트와 변형비트가 사용
 6) SCR(SeCond Change) - 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한것으로 FIFO 기법의 단점을 보완하는 기법
 
* 디스크 스케쥴링
 1) FCFS(First Come Fisr Service)
  - 입출력 요청 대기 큐에 들어온 순서대로 서비스 받는 기법
 2) SSTF(Shorst Seek Time First)
  - 탐색 거리가 가장 짧은 요청을 먼저 서비스 받는 기법
  - FCFS보다 처리량이 많고, 평균 응답시간이 짧다
  - 현재 헤더 위치의 가까운 곳에 있는 모든 요구를 먼 곳보다 먼저 처리하고 헤더에서 멀리 떨어진 요청은 기아상태(Starvation) 발생 가능
  - 처리량이 많은 일괄처리 시스템에 유용하며 응답시간의 편차가 크므로 대화형 시스템에는 부적합
 3) SCAN(엘레베이터 알고리즘)
  - SSTF와 같은 동작을 하지만 진행방향상의 가장 짧은 거리에 있는 요청이 먼저 서비스 받는기법
  - 현재 헤더의 위치에서 진행방향이 결정되면 탐색거리가 짧은 순서에 따라 그 방향의 모든 요청을 끝까지 이동한 후 역방향의 요청사항을 서비스
 4) N-Step SCAN
  - SCAN의 무한대기 발생가능성을 제거한 것으로 SCAN보다 응답 시간의 편차가 적고, SCAN과 같이 진행방향상의 요청을 서비스 하지만, 진행중에 새로이 추가된 요청은 서비스하지않고 다음 진행시에 서비스하는 기법  
 
* Kernel
 - 가장 핵심적인 부분으로 하드웨어보호, 프로그램들과 하드웨어간의 인터페이스 역할
 - 프로세스관리, 기억장치관리, 파일관리, 입출력관리, 프로세스간통신, 데이터 전송 및 변환 등 여러가지 기능 수행

* Shell
 - 사용자의 명령어를 인식하여 프로그램을 호출, 명령 수행하는 명령어 해석기
 - 시스템과 사용자 간의 인터페이스를 담당하며 주기억장치에 상주하지 않고, 명령어가 포함된 파일 형태로 존재하며 보조기억장치에서 교체 처리가 가능
 
* 유닉스 파일 시스템
 1) 부트 블록
  - 부팅시 필요 코드 저장블록
 2) 슈퍼블록
  - 전체 파일시스템에 대한 정보를 저장하고 있는 블록
  - 슈퍼블록은 logical vloume의 4096 바이트 오프셋에 위치하며 크기는 4096바이트
  - 슈퍼블록정보를 보기 위해서는 dumpfs명령어 사용
  - 슈퍼 블록이 손상(corrupt)되었을 때 조치 방법으로 fsck명령어 사용
  - 데이터블록 수, 실런더 그룹수, 데이터 블록과 단편(Fragment)의 크기, 하드웨어 설명, 마운트 위치 등의 정보 가지고 있다
 3) I-Node(Index-Node)블록
  - 각 파일이나 디렉터리에 대한 모든 정보를 저장하고 있는 블록
  - Unix 파일 시스템 내의 개개의 파일을 관리하기 위한 데이터 구조를 의미
  - 모든 파일은 반드시 하나의 I-Node 블록을 갖는다
  - 파일 실체의 주소로서 파일의 선두부분의 블록 번지를 일부 직접갖고, 나머지의 블록번지는 간접 블록번지로 가진다.
  - I-Node 에 저장되는 정보로는 파일소유자, 파일유형, 파일 접근권한, 파일접근시간, 파일크기, 파일 링크수, 파일이 저장된 디스크 블록의 주소등
 4) 데이터 블록
  - 디렉터리별로 디렉터리 엔트리와 실제 파일에 대한 데이터가 저장된 블록을 의미

* 퍼미션( Permission )     
 - 파일의 권한을 나타내는 역할
 - 기본 퍼미션을 결정할 때 umask로 인해서 정해지는데 시스템의 기본설정의 umask는 일반적으로 022, 디렉터리일경우 755, 파일의 경우 644
 - 퍼미션은 /etc/profile 혹은 사용자 디렉토리인 $HOME/.login 또는 .cshrc 에서 설정 가능
 ex) umask 022 - Directory 755, File 644
     umask 077 - Directory 600, File 600
 - 관련 명령어    
   1) umask - 디렉토리 및 파일이 생성되는 기본 퍼미션을 설정
   2) find - 디렉토리 및 파일의 퍼미션으로 검색을 가능하게 해준다
   3) chmod - 디렉토리 및 파일의 퍼미션을 변경하게 해준다

 

* UNIX Shell
 1) .login - 특정 쉘에 관계없는 초기 사용자환경을 지정하여 로그인할 때 지정한 명령들을 자동으로 수행
 2) .logout - 시스템 접속을 종료하기 전에 마지막으로 수행될 내용 지정 파일
 3) .forward - 자신에게 온 전자우편을 다른 곳으로 그대로 전송하기 위한 파일
 4) .gopher - 고퍼에서 사용하는 디렉토리
 5) .hisoty - 쉘을 사용할 때 수행한 명령어의 일부를 저장하는 파일
 6) .ncrecent - ncftp 사용시 최근 접속한 곳의 주소 및 위치 저장 파일
 7) .newsrc - 유즈넷 뉴스그룹 이용시 그룹 환경 저장 파일
 8) .plan - finger 용으로 자신의 정보나 계획을 적어 외부에 공개하는 파일
 9) .rhosts - rlogin을 이용하여 시스템에 접속할 때 암호를 묻지 않고, 자동으로 접속할 수 있는 호스트 및 사용자를 정의
 
* UNIX 명령어
 1) /etc/hosts - DNS 사용하기 전 자체적 호스트 이름과 IP주소를 정의해놓은 파일
 2) /etc/exports - NFS의 디렉토리들을 export하는 파일
 3) /etc/networks - 네트워크의 이름과 각각의 인터넷 주소를 포함
 4) /etc/netmasks - 네트워크에서 경로 결정에 필요한 정보인 netmask를 지정하는 파일
 5) /etc/hostname - 호스트의 이름이 들어있다
 6) /etc/protocols - IP의 각종 인터넷 프로토콜이 정의
 7) /etc/services - TCP/IP 서비스와 그 이름을 사용하는 포트번호, 하부 프로토콜인 전송 프로토콜의 종류가 정의되어 있는 파일
 8) /etc/resolv.conf -DNS 시스템과 검색이름이 등록
 9) /etc/xinetd.conf - 데몬 프로그램이 초기화될 때 사용될 프로세스를 정의하여 인터넷 환경을 관리 ( 외부서비스, 데몬관리 등 )

 

 

* 네트워크 관련
 1) ifconfig -a; if config eth0 promisc - 네트워크 디바이스 상태를 보여준다
 2) netstat -an - 현재 시스템에서 사용되는 네트워크 서비스의 상태를 보여준다
 3) top - CPU, 메모리 등 시스템 자원의 사용 현황
 4) ps -elf(-aux) - 현재 시스템에서 수행중인 데몬과 프로그램의 상태
 5) who, w - 현 시스템 로그인되어 있는 사용자보여준다
 6) snoop - 네트워크 디바이스를 통한 네트워크를 흐르는 패킷을 캡쳐하여 분석할 수 있따.
 7) nslookup - 도메인 네임과 관련된 여러가지 검색 할 수 있다. 또한 도메인에 대한 IP 정보를 보여준다.
 8) hostname - 현 시스템에 할당된 호스트 명을 보여준다
 9) traceroute, login.defs - 특정 호스트까지 가는데 어떤 경로를 거쳐 도달하는지에 대한 네트워크 라우팅 경로 및 경유IP를 보여준다.
 10) xinetd - 네트워크 슈퍼데몬인 Xinetd를 실행
 11) tcpdump - 네트워크 패킷 분석
 12) man - 메뉴얼 페이지 정보
 13) passwd - 암호변경
 14) uname -a 운영체제정보 uname -r 운영체제 릴리즈
 15) tcp wrapper - 네트워크 서비스에 대한 트래픽을 제어하고 모니터링 할 수 있는 유닉스 기반의 방화벽 툴(IP기반접근제어,로깅 등 )

 

* 사용자 계정 관련
 1) /etc/passwd
  - 사용자의 계정 관련된 파일
  - 파일안의 형식
   LoginID : x : UID : GID : Commnet : Home-Directory : Login-She....
 2) /etc/hosts.allow
  - TCP Wrapper 가 설치되어 있는 경우 특정 호스트의 접속 허용 내용을 정의
 3) /etc/hosts.equiv
  - 특정 호스트의 모든 사용자를 신뢰하게 만들어 로컬(Local)호스트로 접근이 허용된 호스트를 설정
 
* 신뢰관계 관련
 1) /etc/hosts.deny
  - TCP Wrapper가 설치되어 있는 경우 특정 호스트의 접속 거부 내용을 정의
 2) /etc/hosts.allow
  - TCP Wrapper가 설치되어 있는 경우 특정 호스트의 접속 허용 내용을 정의
 3) /etc.hosts.equiv
  - 특정 호스트의 모든 사용자를 신뢰하게 만들어 로컬호스트로 접근이 허용된 호스트를 설정
 4) $HOME/.rhosts
  - 외부에서 사용자의 인증 절차 없이 접속할 수 있는 사용자 정의 
    
         

    
 

 

 
728x90