* 운영체제의 발전
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
- 외부에서 사용자의 인증 절차 없이 접속할 수 있는 사용자 정의