2.CPU와 프로세스
클럭 주파수
컴퓨터 안에서는 수많은 장치가 작동하는데 각 장치의 동작속도가 다르면 데이터 주고받기가 원활히 이루어지지 않는다.
컴퓨터는 각 장치의 동기를 위해 신호를 보내서 타이밍을 취하고 있다.
이 신호를 클럭이라고 한다.
클럭 주파수
1초동안 클럭이 발생하는 횟수를 의미한다. (단위 Hz)
CPU는 상당한 고속처리가 필요하므로 CPU 바깥쪽의 기본이 되는 클럭(외부클럭)을 고속화(배속화)하여 외부클럭과 협조하여 움직이도록 하고 있다. 이를 내부클럭(CPU 클럭)이라고 한다.
CPU는 하나의 명령을 몇 나노(10의 -9승)초의 속도로 실행한다. CPU의 빠르기를 나타내는 단위 = 1초동안 실행할 수 있는 명령의 수 MIPS(Million Instrcutions Per Second)라는 수치가 사용된다. 이것은 컴퓨터의 처리 능력을 가리키는 단위로 사용된다.
1MIPS는 1초동안 100만개의 명령을 실행할 수 있다는 의미이다.
하나의 명령실행에 필요한 클럭 수를 CPI(Cycles Per Instruction)이라고 한다.
클럭주파수와 CPI로부터 한 명령당 걸리는 실행시간을 계산할 수 있다.
한명령의 실행시간 = CPI*1클럭시간
1클럭시간 = 1/클럭 주파수
OS가 프로그램을 실행하는 구조
컴퓨터에 설치된 프로그램(애플리케이션)은 하드디스크안에 있으나 OS가 이를 실행할 때는 메모리로 읽어들인(로드한)후에 실행한다.
프로세스 : 메모리상에 할당된 프로그램
프로세스의 종류 실행상태, 실행가능상태, 대기상태
프로세스가 CPU에 할당되어 처리 중인 상태가 실행상태이다.
인터럽트(Interrupt): 우선순위가 높은 처리에 의해 프로세스가 중단되는 현상
OS의 성능과 안전성 평가 지침 RASIS
- Reliability 신뢰성
- Availability 가용성
- Serviceability 보수성
- Integrity 보전성
- Security 안전성
멀티태스킹
OS 가 CPU에게 의뢰하는 작업 단위를 태스크(TASK)라고 한다. 프로세스와 동일한 의미로 봐도 된다.
주요 OS는 여러개의 태스크를 동시에 처리하는 능력을 가지고 있다.
파일을 다운로드하면서 문서를 작성하는 것이 멀티태스킹 덕분이다.
OS가 CPU에게 태스크를 순서대로 할당하는 것이다. 할당 순서를 정하는 것을 스케줄링이라고 한다.
이 전환이 아주 빠른 속도로 수행되므로 동시에 움직이는 것처럼 보인다.
프로세스가 메모리와 같은 공유 자원을 이용할 때 여러개의 프로세스가 같은 시기에 변경되지 않도록 일시적으로 자원을 점유(잠금:lock)하는 일도 발생한다.
다른 프로세스는 잠금이 해제될 때까지 기다리는데, 계속해서 기다리게 되는 Dead Lock이 발생하기도 한다.
OS에는 데드락을 피하기 위한 세마포나 뮤텍스라는 배타 제어 장치가 있다.
Dead Lock 2개의 프로세스가 공유 자원을 잠근 채로 서로의 공유자원에 액세스할 때 양쪽 프로세스가 둘다 영구적으로 대기상태가 되는 것이다.
잡과 태스크
잡
사용자입장에서 컴퓨터에게 시키는 일의 단위를 Job이라고 한다. 잡안에는 여러 프로그램의 실행이 포함된다.
잡관리
OS는 잡의 실행 순서와 잡이 정상적으로 처리되는지 관리한다. 잡을 작게 나눈 처리 단위를 잡 스텝(Job Step)이라고 한다.
잡 제어 언어(JCL) 잡의 실행 방법을 지정하는 언어
잡을 실행순으로 나열한다. 잡스텝을 순서대로 처리한다. *잡의 상태를 기록한다.
테스크(TASK)
테스크는 OS 입장에서 본 작업 단위. OS는 잡 스텝을 태스크로 분해하여 CPU에게 처리를 의뢰한다.
잡스텝을 태크스로 분해한다. 태스크의 처리를 CPU에게 의뢰한다.
프로세스나 스레드를 태스크라고 부르기도 한다.
태스크 관리
OS는 잡 관리로부터 넘겨받은 태스크의 상태를 관리, CPU의 처리 할당을 수행한다.
태스크를 생성한다. 태스크의 처리를 CPU에게 의뢰한다. *처리가 종료되면 태스크는 소멸된다.
스루풋(Throughput)
OS의 단위 시간당 처리 능력을 의미
리스폰스 타임과 턴어라운드 타임
OS가 잡을 처리하는 시간은 다음과 같이 분류된다.
- 명령입력
- 처리조건 입력시간
- CPU 처리시간(리스폰스 타임(응답시간))
- 처리결과 출력시간
- 다음 명령 입력 가능
1~4 : CPU의 처리시간+입출력시간= 턴어라운드 타임
스풀(spool)
CPU로부터 입출력 장치로 가는 명령을 메모리와 같이 비교적 고속인 기억 장치에 일시적으로 저장하는 것을 의미한다.
예를 들어 프린터는 CPU보다 처리속도가 느리므로 스풀을 사용해서 CPU의 처리와 입출력 동작의 처리의 차이를 완화시킬 수 있다.
디스크에 저장된 스풀 데이터를 스풀 파일이라고 한다.
인터럽트(Interrupt)
실행중인 프로그램을 중단하고 우선순위가 높은 프로그램에게 CPU를 할당하고 실행하는 것을 인터럽트라고 한다. 인터럽트에는 내부 인터럽트와 외부 인터럽트가 있다.
*내부인터럽트(소프트웨어 인터럽트) 실행중인 프로그램이 원인이 되어 일어나는 인터럽트
<종류>
*프로그램 인터럽트: Overflow(계산시 자리넘침)으로 인해 쓰기가 허가되지 않는 메모리 영역에 액세스했을 때 발생한다.
*Page Fault : 무효한 메모리를 참조할 때.
*Trace : 디버그를 위해 프로그램을 한 명령씩 실행한다.
*Superviser Call : 시스템 콜을 실행한다.
*명령 코드 이상 : 무효한 명령을 실행한다.
*외부 인터럽트(하드웨어 인터럽트) 주변기기의 입출력 동작이나 하드웨어 고장, 오작동으로 인해 일어나는 인터럽트이다. <종류>
기계 체크 인터럽트 : 전원 이상, 하드웨어 장애 발생시 기계 체크 인터럽트가 발생되며 가장 우선시된다.
타이머 인터럽트 : 일정 시간 또는 주기별로 하드웨어로부터 발생하는 인터럽트.
입출력 인터럽트 : 주변 기기의 입출력 동작이 완료되었을 때와 같이 상태가 변화했을 때 발생한다.
콘솔 인터럽트 : 사용자가 입출력 장치를 조작하면 발생한다.
프로세스란?
사용자가 프로그램을 실행하면 OS는 그 내용을 메모리상으로 읽어들여 처리를 실행한다. 이 메모리상에 할당된 프로그램을 의미한다. 하나의 프로그램은 여러개의 프로세스를 만들 수 있다.
<과정>
디스크에 있는 실행파일(프로그램)을 실행한다.
메모리로 읽어들인다. (로드)
메모리 상에 프로세스a, 프로세스b 등으로 분류한다.
프로세스가 실행된다.
프로세스를 프로그램의 인스턴스(실체)라고도 한다.
멀티태스킹(Multi-tasking)
OS관리하에서 여러개의 태스크(프로세스)가 병행하여 작동하는 것을 의미한다. 태스크를 순서대로 CPU에 할당하고 있기 때문에 여러개의 태스크가 동시에 작동하는 것처럼 보인다.
태스크 전환에는 약간의 시간(오버헤드)가 걸린다.
시분할 처리 시스템(Time Sharing System, TSS)
여러 사용자가 한대의 고성능 컴퓨터를 공유하여 사용할 때 CPU의 사용권한을 사용자에게 순서대로 단시간 할당하는 시스템을 의미한다.
사용자에게는 마치 자신이 컴퓨터를 점유하고 있는 것처럼 보인다.
프로세스 관리
<프로세스 상태 종류>
프로세스는 대기상태, 실행가능상태, 실행상태를 옮겨가며 실행된다.
우선순위가 높은 프로세스부터 실행상태로 바뀐다.
디스패치와 프리엠션
OS가 가장 우선순위가 높은 실행가능 상태의 프로세스에 대해 CPU의 사용권한을 할당하는 것을 디스패치(Dispatch)라고 한다. 또한 인터럽트에 의해 CPU의 할당을 해제하는 것을 프리앰션(Preemption)이라고 한다.
Preemption은 가로채기라는 뜻이다.
멀티태스킹의 종류
*프리엠티브
OS가 실행가능상태인 태스크에게 CPU의 사용권을 할당하고 강제적으로 태스크를 전환하여 관리하는 것을 Preemptive Multitasking이라고 한다.
타임슬라이스: CPU의 사용권한을 할당하는 단위시간
*논프리엠티브
실행중인 태스크가 처리를 수행하지 않는 시간을 자발적으로 해제함으로써 다른 태스크와 동시에 실행할 수 있도록 하는 것을 Non-Preemptive Multitasking이라고 한다.
태스크가 종료될 때까지 CPU의 사용권한을 다른 태스크에게 양보하지 않는다. CPU를 해제하지 않는 태스크가 있으면 OS 전체의 동작이 정지되는 경우가 있다.
프로세스 제어
- 프로그램 상태어(PSW : Program Status Word)
인터럽트로 인해 중단된 프로그램의 상태나 연산의 종료 상태를 저장해 두는 레지스터
영어 단어를 표현할 수 있는 정도의 용량 64bit 정도를 가진 저장 영역이므로 word라고 표현한다.
- 프로세스 제어 블럭(PCB: Process Control Block)
각 프로세스의 CPU상태(컨텍스트)나 프로세스의 상태를 저장해두는 메모리 영역을 의미한다.
- 컨텍스트 스위치
인터럽트로 인해 프로세스를 전환할 때 OS가 컨텍스트를 PCB에 저장하고 복원하는 것을 의미한다.
스케줄링(Scheduling)
OS가 여러개의 프로세스를 처리할 때 할당할 순서를 정하는 것을 의미한다. 스케줄링을 위한 프로그램을 스케줄러라고 한다.
스루풋이 향상되고 응답시간이 단축되도록 스케줄링한다.
<스케줄링 종류>
- 라운드 로빈 방식 (Round Robin Scheduling)
프로세스가 기다리는 순서대로 일정시간씩 CPU를 할당해서 시간이 초과한 프로세스를 맨 마지막으로 돌리는 방식이다.
- 우선순위 방식
OS가 프로세스의 우선순위를 정해서 우선순위가 높은 프로세스부터 실행하는 방식. 우선순위 방식에는 Dead Lock이 발생할 수 있다.
프로세스의 분기
fork와 exec
UNIX 계열 OS에서 시스템 콜에 의해 프로세스를 복사하는 것을 fork라고 한다.
복사되는 쪽을 부모프로세스, 복사된 쪽을 자식프로세스라고 한다.
자식프로세스에서 다른 프로그램을 실행하도록 지시하는 것을 exec이라고 한다.
fork를 하면 자식 프로세스용으로 새로운 PCB와 메모리 공간이 마련된다.
wait
자식프로세스의 처리가 끝나면 부모 프로세스에게 신호가 보내지므로 이것을 기다림으로써 부모는 자식 프로세스의 종료까지 대기할 수 있다. 그후에 wait 시스템 콜에 의해 자식 프로세스에게 마련되었던 PCB와 메모리가 제거된다.
부모 프로세스는 하나의 wait처리가 끝날때까지 다른 자식 프로세스의 종료시그널을 받을 수 없다.
프로세스의 동기
배타 제어
여러개의 프로세스가 파일이나 데이터베이스에 동시에 엑세스하면 데이터의 무결성이 손상될 수 있다. 처리가 끝날 때까지 프로세스 하나에 자원을 독점시키는 것을 의미한다.
세마포(Semaphore)
정해진 수 이상의 프로세스가 공유 자원에 동시 액세스하지 않도록 카운터를 사용하여 제어하는 장치. OS는 세마포의 P조작(획득)과V조작(해제)로 통행가능, 통행불가 와 같은 두가지 상태를 관리한다.
프로그램 중 배타 제어가 필요한 부분(P조작, V조작까지의 처리)를 크리티컬 섹션이라고 한다.
데드락
2개의 프로세스가 공유 자원을 잠근 채로 서로의 공유자원에 액세스하려고 하면 양쪽 프로세스가 모두 영구적으로 대기상태가 된다.
*배타잠금은 누군가가 조작중인 데이터에 대해 참조나 변경할 수 없다.
*공유잠금은 조작 중인 데이터에 대해 참조는 할 수 있으나 변경은 할 수 없다.
뮤텍스(Mutex)
데드락을 피하기 위한 방법으로 세마포와 뮤텍스가 있다. 뮤택스는 세마포의 카운터 초기값이 1인 경우를 의미한다.
프로세스 간 통신
프로세스끼리는 다른 메모리 공간을 참조하기 때문에 서로 어떤 데이터를 갖는지 알 수 없다. OS에는 프로세스끼리 통신을 해서 데이터를 주고받는 기능이 마련되어있다.
*메세지 큐 : 프로세스끼리는 OS의 메세지 기능을 이용해서 1대1로 통신할 수 있다. 메세지를 넣는 장소를 메세지 큐라고 한다.
- 파이프 : 여러개의 프로세스 입출력을 연결하는 장치. 파이프는 fork한 부모자식 프로세스간에 사용된다.
파이프는 일방통행이기 때문에 상대 프로세스 별로 파이프가 다르다.
- 이름 붙은 파이프 : 파이프에 이름을 붙임으로써 부모 자식 프로세스가 아니더라도 프로세스간 통신을 할 수 있다.
공유 메모리와 스레드
공유 메모리
여러개의 프로세스에서 공통으로 사용할 수 있는 메모리 영역으로, 시스템 콜에 의해 작성된다. 공유 메모리에 접속하는 것을 Attach, 끊는 것을 Detach라고 한다.
- 시스템콜 : 프로세스A->커널
- 공유메모리 확보 : 커널-> 메모리영역
- 어태치 : 프로세스가 공유메모리에 접근
- 액서스 : 공유메모리가 프로세스의 요청을 허가함
스레드(Thread)
프로세스 안의 프로그램 실행의 흐름을 의미한다. 스레드는 분기가 가능하다. 여러개의 스레드를 동시에 실행할 수 있으며 이것을 멀티스레드라고 한다.
프로세스와 스레드의 차이는?
스레드가 프로세스를 동시에 여러개 실행하는 것과 다른 점은 동일한 프로세스의 스레드는 같은 메모리 공간을 참조한다는 점이다. 스레드는 CPU를 사용하는 최소 단위, 라이트 웨이트 프로세스(light weight process)라고 부른다. 스레드는 메모리의 이용효율이 올라간다.