2015104124!
전자공학과!
진우빈!
!
프로세스가 동작할 때 메모리 영역에서는 어떤 일이 일어날까? 메모리 영역은 4가지 영역으로 나뉘게 된다.!
1. text segment에서는 프로그램의 기계어 코드, 실행 명령어 등이 저장되게 된다.!
2. data segment는 static data가 저장되게 된다. 전역변수, static byte의 메모리들이 저장되는 것이다.!
3. Stack 영역에서는 function call을 할 때마다 메모리가 생성된다. 함수 내에서의 변수들이 저장된다.!
4. Heap 영역에서는 new, malloc등의 명령어를 통해 생성되는 동적 할당 변수가 저장된다.!
프로세스의 상태는 크게 5가지로 나뉜다.!
1. New: 프로세스를 새로 만든 상태!
2. Running: CPU에서 현재 수행되는 상태!
3. Ready: CPU에서 수행 될 준비를 갖췄으나 아직 수행되지 않은 상태 (다른 프로세스가 수행 중)!
4. Waiting: 수행 중에 다른 이벤트가 생겨서 대기되는 상태 (ex. cin등을 통해 입력을 대기받는 상태)!
5. Terminated: 프로세스가 종료된 상태 ( 이 때 사용한 모든 자원들을 운영체제에 반납하게 된다)!
Ready 상태의 여러 프로세스들 중에서 어떤 프로세스를 수행할 지는 OS의 스케쥴러가 결정하게 된다.!
Ready와 Waiting의 차이를 아는 것이 중요하다. IDLE프로세스란 수행되는 프로세스가 아무 것도 없을 때
의미 없이 수행되는 프로세스를 의미한다. 가령 현재 메모리에 IDLE프로세스, 아래한글 프로그램, mp3 실행
프로그램 이 3가지가 올려져 있다고 가정해보자 이 때 프로세스는 어떻게 운영될까?!
1. 첫번째로 IDLE프로세스가 running 일 때 2개중 하나의 application 프로그램이 동작될 때 IDLE 프로세
스는 ready 상태로 된다.!
2. ready 상태의 프로세스는 이 때 IDLE, hwp.exe, mp3.exe 총 3개가 존재하게 되는데 이 때 어느 것을
수행 할 지는 스케쥴링 알고리즘을 통해 결정이 된다.!
3. 가령 mp3.exe가 수행 된다고 가정하면 mp3프로세스가 running상태로 수행이되고 시스템콜을 통해
mp3 파일을 읽어달라고 운영체제에 요청하게 된다.!
4. 이 때 mp3프로세스의 상태가 waiting으로 바뀌고 그 후 ready 상태의 2가지 프로세스 중 hwp.exe가
실행된다.!
5. hwp.exe가 실행된 후 사용자의 입력을 기다리는 waiting 상태가 이루어지게 되면 이 때 ready 상태의
IDLE이 수행된다. 이렇게 프로세스가 운영되는 것이다.!
PCB는 Process Control Block으로 프로그램을 실행시키면 해당 프로세스의 모든 정보를 저장하고 관리하
는 data structure를 의미한다. CPU에서는 프로세스와 다른 프로세스를 switch해가며 수행되는 프로세스
가 수시로 바뀌게 되는데 이를 Context switch라고 한다. 수행되는 상태의 프로세스를 저장하고 다른 프로
세스로 넘어가는 형식이다. 이 때 overhead가 발생하게 되지만 이를 감수하더라도 이 방법이 프로세스를 효
율적으로 수행하는 방법이다. Running 상태의 프로세스는 현재 실행중이기 때문에 큐안에 들어가 있지 않다.!
Ready 상태가 되면 레디큐 안으로 프로세스가 들어가게 되고 I/O의 인터럽트가 발생하게 되어서 waiting 상
태가 되면 I/O장치의 따로 담당하는 큐 안으로 프로세스가 들어가게 된다. ex) cin인 경우 키보드장치의
queue안으로 들어가게 됨.!
스케쥴러는 스케쥴링을 하는 주체이다. 크게 Long-term scheduler와 Short-term scheduler로 나뉘는데
전자는 현재 OS에는 존재하지 않는 개념이다. 가령 총 수행될 job이 10개인데 이 때 메인 메모리에 5개밖에
올리지 못한다면 그 10개 중에 5개 프로세스를 고르는 것을 말한다. 이 5개중에 어떤 하나를 CPU에서 수행
시킬까 결정은 후자의 스케쥴러가 담당하게 된다. 그렇다면 옛날이 아닌 요즘 OS에서도 메모리가 부족해서
모든 job프로세스를 다 메모리위에 올리지 못하는 경우가 발생하지 않을까? !
현재 OS에서는 Virtual Memory 관리를 통해 모든 프로세스를 다 메모리 위에 올릴 수 있다. 따라서 롱텀스
케쥴러가 필요없는 것이다. 고사양 게임이 하드웨어가 받춰주지 않지만 돌아가긴 돌아가는데 원활히 돌아가
지 않는 이유가 바로 이 가상메모리관리 시스템 덕분이다. 이에 대해서는 더 추후에 배우게 된다.!