티스토리 뷰

학교/운영체제

[04] 운영체제 - 프로세스

군옥수수수 2017. 9. 21. 15:04

안녕하세요.
오늘은 저번 시간에서 마저 언급하지 못한 프로세스(Process)와 스레드(Thread)에 관해
포스팅을 해보도록 하겠습니다.  많이 언급되는 주제이고 그만큼 중요한 주제이므로
조금은 긴 글이 되고 학생인 저로서는 약간 부족하거나 완벽하지 못한 부분이 있을 수 있습니다.
이 점 양해 부탁드리고 혹시 잘못된 정보나 더 좋은 표현이 있다면 피드백 부탁드립니다!
그러면 바로 시작해보도록 하겠습니다
프로세스
프로세스란? 간단히 메모리에 올라와 있는 프로그램들 중 현재 실행 중인 프로그램을 말합니다.
간단한 분류로 I/O 작업이 많은 프로세스라면 I/O-bound Process
CPU 작업이 많으면 CPU-bound Process라고도 합니다

프로세스 상태 (Process State)
프로세스에서 중요한 것이 바로 프로세스의 현재 상태를 알려주는 Process State입니다.
크게 5가지가 있는데 다음과 같습니다.
New : 프로세스가 생성되었을 때 상태
Running : 프로세스(명령문들)가 실행 상태일 때
Waiting : 프로세스가 어떠한 event가 발생하기를 기다릴 때
Ready : 프로세스가 프로세서에게 할당받기를 기다릴 때
Terminated : 프로세스가 실행을 끝냈을 때
다음 그림은 굉장히 중요한 그림입니다~!


Diagram of Process State
그리고 Ready 상태와 Waiting 상태가 헷갈릴 수 있습니다.
비교하여 설명하자면
I/O 작업이나 기타 event로 인한 상태의 변화에는
Running -> Waiting -> Ready -> Running 의 순서대로 상태가 변합니다.
그리고 앞선 포스팅에서 말씀드렸다시피 운영체제는 프로세스들의 자원 독점을 막기 위해
자원을 사용할 때 일정 시간을 단위로 할당하고 회수를 합니다.
이때 시간이 초과가 되면 다른 작업에게 자원을 할당하는데 이때 발생하는 Interrupt에 의해 변하는 상태가
Running -> Ready -> Running 이 순서대로 진행되게 됩니다.
PCB : Process Control Block
PCB란 프로세스의 정보를 저장하고 있는 곳으로 프로세스의
상태, Program Counter, Register 등을 저장하고 있습니다.
이러한 정보를 저장하는 데는 이유가 있겠죠?!
바로 설명해드리도록 하겠습니다.

위의 프로세스 상태 설명에서도 보셨듯이 프로세스는 생성되고 종료될 때까지 쭉 같은 상태가 아닙니다.
빈번한 상태의 변환이 일어나고 이런 변환 과정 속에서 이전의 작업들을 잃지 않고 계속해서 유지시켜
주려면 상태가 바뀌기 전의 상태를 저장하고 있어야 다시 작업에 복귀를 했을 때 그다음부터 순서대로
일을 처리해나갈 수 있기 때문입니다.


위의 그림과 같이 Interrupt나 System call에 의해 프로세스가 바뀐다면
현재 프로세스의 상태를 저장하고 다음으로 스케줄링 된 프로세스를 실행시키는데
이때 스케줄링 된 프로세스가 이전에 하던 작업이 있다면 그 작업을 불러오는 과정을 거칩니다.
여기서 알아야 할 것이 있습니다.
프로세스 상태의 Ready와 Waiting 상태를 비교했을 때 언급했던 것이 바로 Multitasking인데요
이전 포스팅에서 Multitasking에서 언급한 것과 같이 운영체제는 각 작업들마다 자원을 할당해주는데
일정 시간 동안만 사용할 수 있게 함으로써 자원들의 효율적인 사용이 가능하게끔 하는데요.
사실 이렇게 할당받은 시간에는 위와 같은 PCB의 저장과 복원의 시간이 포함이 됩니다!
만약에 저장과 복원의 시간이 오래 걸린다면 그만큼 작업을 수행할 수 있는 시간은 짧아지고 부족해지는데요.
그래서 이러한 PCB의 저장과 복원은 H/W로 구현함으로써 작업을 수행할 수 있는 시간이 늘어나고
자원을 보다 더 효율적으로 사용할 수 있게 됩니다.
Process Scheduling Queue
Job Queue - 시스템 상의 모든 프로세스들을 의미합니다.
Ready Queue - 메모리에 올라가 있고 실행을 기다리는 프로세스들을 의미합니다.

Device Queue - I/O 작업을 위해 기다리고 있는 프로세스들을 의미합니다.


위의 사진을 보면서 프로세스의 상태의 변화와 Queue를 연관 지어서 보시면 이해가 잘 되실 겁니다!
Scheduler
이러한 Queue에 어떤 것을 올릴지 결정하는 것이 바로 Scheduler입니다.
그 Scheduler에는 세 가지가 있습니다.

1.  Long-term Scheduler
    Long-term Scheduler는 Job Scheduler라고도 불리며 메모리(Ready Queue)에 어떤 것들을 올려야 하는지를 결정해주는
    Scheduler입니다. 메모리에 있는 작업들이 끝나서 Terminated 되면 올려주기 때문에 스케줄링 속도는 빠르지
    않아도 괜찮습니다.
2.  Short-term Scheduler
    Short-term Scheduler는 CPU Scheduler라고도 불리며 어떤 프로세스에게 CPU 자원을 할당할 것인지를 결정해주는
    Scheduler입니다. CPU의 자원 할당은 아주 짧은 시간 단위로 반복되기 때문에 이러한 스케줄링 작업 속도는 굉장히 빨라야 합니다.
3.   Medium-term Scheduler
    Medium-term Scheduler는 실행되기에 필요한 자원이 부족한 프로세스들 중 어떤 프로세스를 Swap-out 하여 Disk에 저장할지
    어떤 프로세스를 그 자리에 Swap-in 해야 할지를 결정해주는 Scheduler입니다.

Long-term Scheduler는 Multiprogramming의 정도를 제어하는데 이 뜻이 무엇이냐 하면
앞선 포스팅에서 언급한 Multiprogramming의 목적을 생각하시면 이해가 되실 겁니다.
Multiprogramming은 한 프로세스가 CPU 작업을 끝내고 I/O 작업에 들어간다면 다른 프로세스에게 CPU를 할당해줌으로써
자원의 효율성을 높이는 방법입니다.
그리하여 Long-term Scheduler는 메모리(Ready Queue)에 프로세스를 올릴 때 I/O-bound Process와 CPU-bound Process를
적절히 섞어서 올려주어야 합니다. 그래서 Long-term Scheduler가 Multiprogramming의 정도를 제어한다고 하는 것입니다.
Context Switch
Context란 하나의 하나의 흐름을 말하는데 여기서는 프로세스의 흐름을 말합니다.
그리고 그러한 흐름, Context는 PCB 안에서 표현되고 앞에서 말한 Process Swtiching을 통해
Context 또한 Context Switching이 일어나게 됩니다.
Process Creation
프로세스들은 다른 프로세스를 생성할 수 있으며 만들고 만들어진 프로세스의 관계를 부모-자식 관계라고 합니다.
또한 모든 프로세스는 자신을 식별할 수 있는 고유의 id 값을 갖게 됩니다.

프로세스 생성에는 크게 세 가지를 고려하여 자식을 만들게 되는데 그 세 가지는 다음과 같습니다.
1. 자원 공유 문제 : 자원을 공유할 것인지 안 할 것인지 등을 결정. (접근 권한)
2. 실행, 종료 문제 : 동시에 실행될지 아닐지, 동시에 끝낼지 자식이 끝난 후 부모가 끝낼지 등을 결정
3. 주소 공간 문제 : 완전히 똑같이 만들지 아니면 다른 내용을 집어넣을지 등을 결정.
프로세스 간의 통신
여러 프로세스들은 여러 목적을 통해 상호 작업을 수행해야 하는 경우가 있습니다.
예로는 정보 공유, 컴퓨팅 속도 증가, 편리함 등이 있습니다.
이러한 프로세스 간의 통신에는 두 가지 방법이 있습니다.

1. Shared Memory
    Shared Memory 방법은 상호 작용하는 프로세스 사이에 하나의 공유하는 공간을 만들어서 공유하는 정보들을 저장하는 방법입니다.
    운영체제를 거쳐야 하는 Message Passing에 비해 속도가 빠릅니다. 하지만 같은 Memory 공간을 공유하기 때문에 정보를 제공해주는
    프로세스와 그 정보를 받아 이용하는 프로세스가 동시에 메모리에 접근을 하게 되면 충돌(동시에 값을 수정) 하여 데이터의 불일치라는
    문제를 야기하게 됩니다.
2. Message Passing
    Message Passing 기법은 상호 작용하는 프로세스 간 작업이 필요한 경우 운영체제에게 각자의 Message를 전달함으로써 통신을 하는
    방법입니다. 운영체제를 거쳐야 하기 때문에 Shared Memory에 비해 속도가 느립니다.


a = Message Passing / b = Shared Memory
오늘은 이렇게 Process에 관해서 포스팅을 해봤는데요 Process만 해도 이렇게 내용이 길어져서
오늘은 여기까지 하고 다음 시간에 Thread에 관해서 마저 알아보도록 하겠습니다.
감사합니다!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함