01 프로세스 개념
운영체제에서 프로세스는 하나의 작업 단위이다.
사용자가 마우스를 더블클릭하여 프로그램을 실행하면 그 프로그램은 프로세스가 된다.
프로그램과 프로세스의 차이?
프로그램이란 어떤 데이터를 사용하여 어떤 작업을 할지 그 절차를 적어놓은것이지만
프로세스는 프로그램을 작성된 작업 절차를 실제로 실행에 옮긴다는 의미.
즉 작성한 프로그램이 실행되면 프로세스가 됨.
프로그램 : 저장장치에 저장되어 있는 정적인 상태
프로세스 : 실행을 위해 메모리에 올라온 동적인 상태
2. 프로그램 처리방식
2.1 일괄 처리 시스템
명령 처리 방식을 순차적으로 큐로 처리하는 방식.
2.2 시분할 처리 시스템
CPU 스케줄링과 다중 프로그래밍을 이용해서 각 사용자들에게 컴퓨터 자원을 시간적으로 분할하여 처리하는 방식.
-시분할 시스템의 문제점-
시스템 예상치 못하게 지연 되었을 때, 효율이 떨어지는 문제점이 있다.
(시분할 처리 방식은 자원을 시간적으로 분할하여 처리하는 방식은 운영체제 시분 프로세스 처리와 비슷)
3. 프로그램에서 프로세스로의 전환 (Process Control Block)
컴퓨터의 전원이 켜지면 운영체제는 프로그램을 메모리의 적당한 위치(폰노이만 아키텍쳐)로 가져온 후 프로세스 제어 블록(PCB)을 가져온다. PCB에는 프로세스를 처리하는데 다양한 정보가 들어 있다.
프로그램이 프로세스가 되었다는 것은 운영체제로 부터 PCB를 받았다는 의미이다.
프로세스 = 프로그램 + PCB
프로그램 = 프로세스 - PCB
4. 프로세스의 상태
생성 사태 : 프로세스가 메모리에 올라와 실행을 기다리는 상태 (PCB를 얻는 것)
준비 상태 : 메모리를 OS 올려놓는 것 (CPU를 얻을 때 까지 기다리는 상태)
준비 상태에 있는 실행할 프로세스를 선정하는 일을 CPU스케줄러가 담당.
준비 상태의 프로세스 중하나를 골라 실행 상타를 바꾸는 CPU 스케줄러의 작업을 디스패치라고 함.
실행 상태 : 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태(계속 실행되는 상태가 아님)
완료 상태 : 실행 상태의 프로세스 주어진 시간 동안 작업을 마치면 진입하는 상태 (프로세스 제어 블록이 사라진 상태)
프로세스란 결국 PCB를 할당 받 는 것
생성사태 : 프로그램 메모리에 가져와 실행 준비가 완료된 상태
준비 상태 : 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태. 실행될 프로세스를 CPU 스케줄러가 선택함.
실행 상태 : 선택된 프로세스가 타임 슬라이스를 얻어 CPU를 사용하는 상태. (프로세스 사이의 문맥 교환이 일어남)
대기 상태 : 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때 까지 기다리는 상태 (입출력이 완료되면 준비상태로 감)
완료 상태 : 프로세스가 종료된 상태. 사용하단 모든 데이터가 정리됨.
핸드폰을 최적화 하는 원리?
핸드폰을 최적화해서 성능을 높이는 원리는
전원을 끄거나 최적화 프로그램을 통해 PCB를 반납하는것 이라고 이해할 수 있다.
4.1 휴식상태와 보류 상태
프로그램이 복잡해지고 OS 의 성능이 향상하면서 새로운 상태가 필요하게 되었다.
휴식상태 : 프로세스가 작업을 일시적으로 쉬고 있는 상태이다;.
보류상태 :프로세스가 메모리에 잠시 쫒겨난 상태로 휴식 상태가 있음.
메모가 꽉 찰 때, 프로그램에 오류가 있어서 실행을 미루어야 할 때 보류상태가 된다
5. 프로세스 제어 블록(PCB)
프로세스 제어 블락이란, 프로세스를 실행하는데 필요한 중요한 정보를 보관하는 자료 구조로 TCB라고 하기도 한다.
포인터 : 준비 상태나 대기 상태의 큐를 구현할 때 사용
프로세스 상태 : 프로세스가 현재 어떤 상태에 있는지를 나태내는 정보
프로세스 구분자 : 운영체제 내에 있는 여러 프로세스를 구현하기 위한 구분자
프로세스 카운터 : 다음에 실행될 명령어의 위치를 가리키는 프로그램 카운터의 값
프로세스 우선순위 : 프로세스의 실행 순서를 결정하는 우선순위
각종 레지스토 정보 : 프로세스가 실행되는 중에 사용하던 레지스터의 값.
메모리 관리 정보 : 프로세스가 메모리으 어디에 있는지 나태내는 메모리 위치 정보, 메모리 보호를 위해 사용하는 경계 레지스터 값과 한계 레지스터 값
할당된 자원 정보 : 프로세스를 실행하기 위해 사용하는 입출력 자원이나 오픈 파일 등에 대한 정보
계정 정보 : 계정 번호, CPU 할당 시간, CPU 사용 시간 등
부모 프로세스 구분자와 자식 프로세스 구분자: 부모 프로세스를 가리키는 PRID와 자식 프로세스를 가리키는 CPID 정보
효율적인 자원 관리를 위해
6. Context Switching(문맥교환)
Context switching이란 CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이 작업이다.
(실행 상태에서 나가는 pcb는 지금까지 내용을 저장하고, 반대로 실행 상태로 들어오는 프로세스는 cpu가 다시 셋팅한다/ 타임아웃을 밖으로 쫒아내는 개념)
7. 프로세스의 구조
코드 영역 : 프로그램의 본문이 기술된 곳. 프로그래머가 작성한 코드가 탑재되며 탑재된 코드는 읽기 전용으로 처리됨.
데이터 영역 : 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓는 곳
스택 영역 : 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓는 곳.
7. 프로세스 생성과 복사
프로세스 생성과 복사는 다른 개념으로 받아들여야 된다.
프로그램을 생성하면 운영체제는 프로그램을 메모리로 가져와 크드 영역에 넣고 프로세스 제어 블록을 생성한다. 그리고 메모리에 데이터 영역과 스택 영역을 확보한 훙 프로세스를 실행한다.
이렇게 매번 새로운 프로세스를 생성할 수 도 있지만 기존의 사용하던 프로세스를 복사하게 되면 효율적인 자원 관리가 가능하다.
2.1 fork() 시스템 호출
fork() 시스템 호출은 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수이다. 커널에서 제공하는 일종의 시스템 호출이라고 할 수 있다.
부모 프로세스가 가지고 있는 자원을 자식에게 복사한다고 생각해볼 수 있다.
실행하던 프로세스는 부모 프로세스, 새로 생긴 프로세스는 자식 프로세스로서 부모-자식 관계가 된다.
fork시스템 장점
- 프로세스의 생성 속도가 빠름
- 시스템 관리를 효율적으로 할 수 있음
* 자원을 효율적을 관리할 수 있다 *
(복사 전환 기능이 없으면 매 프로세스 마다 새로운 프로세스를 만들어야 한다.)
fork() 시스템을 호출하게 되면 부모 프로세스영역이 복사되어 똑같은 자식 프로세스가 생성됨
그러나 PID, 메모리 관련정보(data, 변수 등), 부모자식 구분자(PPID, CPID)등이 변경됨.
2.1 exec() 시스템 호출
기존의 프로세스를 새로운 프로세스를 전화하는 함수이다
fork()함수와 exec() 함수 비교
fork() : 새로운 프로세스를 복사하는 시스템 호출
exec() : 프로세스는 그대로 둔 채 내용만 바꾸는 시스템 호출
그대로 복사 붙여넣기 하기 보다는 중간을 변경하는것 exec() 그대로 둔체 구조를 변경하는 것이라고 이해할 수 있다.
= 이미 만들어진 프로세스의 구조를 재활용하는 것.
유닉스에서 exec() 시스템 호출은 인자에 따라 excecl(), execlp(), execv(), execvp()와 같은 함수가 있는데 모두 기능이 동일함
8. 프로세스의 계층 구조 (부모 자식 구조)
프로스세 계층 구조의 장점
1. 여러 작업을 동시에 처리할 수 있음
ex) 다수의 사용자가 한 홈페이지의 기능을 동시에 사용할 수 있다.
2. 프로세스 재사용이 용이함.
3, 자원 회수가 용이함.
- 자원을 회수하지 않으면 자원이 낭비되어 효율성이 떨어진다.
프로세스를 계층구조 만들면 프로세스 간의 책임 관계가 분명해짐.
미아 프로세스란?
회수되지 않고 낭비된 프로세스를 미아 프로세스라고 한다.
C 언어의 exti() 또는 return()문은 자식 프로세스가 작업이 끝났음을 부모 프로세에 알리는 것으로 미아 프로세스를 미연에 방지하기도 한다.
이퍼럼 회수도지 않은 미아프로세스, 좀비 프로세스라고 불리는 것들을 os 운영에 효율성을 떨어트린다.
8. 스레드 정의
운영체제는 코드와 데이터를 메모리에 가져오고, 프로세스 제어 블록을 생성하고, 작업에 필요한 메모리 여역을 확보한 후, 준비된 프로세스를 준비 큐에 삽입한다. 이때 CPU 스케줄러가 CPU에 전달하는 일 하나가 스레드 이다.
* 프로세스의 더 작은 단위의 개념이라고 이해할수도 있다.
스쿼드란 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위이다.
프로세스 스레드의 차이
프로세스끼르는 약하게 연결되어 있는 반명 스레드낄는 강하게 연결되어 있다.
멀티 스레드
- 프로세스 내 작업을여러 개의 스레드를 분할함으로써 작어브이 부담을 줄이는 프로세스 운영 기법
멀티 태스킹
- 운영체제가 CPU 작업을 줄 때 시간을 잘게 나누어 배분하는 기법
멀티프로세싱
- CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경
멀티태스킹 VS 멀티 스레드
멀티 스레드를 적용시킬 경우 영역을 세분화해서 낭비 메모리를 줄일 수 있다. 독립적인 프로세스에서 벗어나게 됨으로 자원을 효율적으로 관리할 수 있다.
멀티스레드의 장점
1. 응답성 향상
2. 자원 공유
3. 효율성 항상
4. 다중 CPU 지원
멀티 스레드의 단점
멀티 스레드는 자원 할당의 효휼화를 불러오지만
시스템에 오류가 생길 경우 프로그램 전체에 오류가 생긴다.
예를들어,
한 웹 브라우저 탭을 멀티 스레드 방식으로 사용하고 있고 여러 페이지 중 YOUTUBE 채널에만 오류가 생겼다고 가정해보자
인터넷 오류가 생길 경우 위 같은 오류창을 본 경험이 있을 것이다. 이때 오류를 벗어나기 위해 페이지가 종료되는 경우가 있는데
이때 YOUTUBE 페이지만 나가지는 것이 아니라 한 탭안에 포함된 모든 브라우저가 종료되게 된다.
만약 독립된 탭으로 나누었다면 단순히 오류가 있던 YOUTUBEPAGE만 종료되었을 것이다.
8-1.멀티 스레드 모델
커널 스레드와 사용자 스레드
커널 스레드 : 커널이 직접 생성하고 관리하는 스레드
사용자 스레드 : 라이브러리에 의해 구현된 일반적인 스레드
사용자 레벨 스레드
사용자 프로세스 내에 여러 개의 스레드가 커널의 스레드 하나와 연결되어 라이브러리가 스케줄링을 하고 작업에 필요한 정보를 처리하기 위해 문맥 교환이 필요 없음
커널 레벨 스레드
하나의 스레드가 하나의 커널 스레드에 연결되어 있는 형식
독립적으로 스케줄링이 되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 계속 작업할 수 있음.
멀티레벨 스레드
최근 OS가 사용하는 스레드로
사용자 레벨 스레드와 커널 레벨 스레드를 혼합한 방식이다.
커널 스레드가 대기 상태에 들어가면 다른 커널 스레드가 대신 작업을 하여 사용자가 레벨 스레드보다 유연하게 작업을 처리할 수 있음.
연습문제
1. PCB
2. 준비 상태
3. 대기 상태
4. 디스패치
5. 휴식상태
6. 문맥교환
7. fork()
8. exec()
9. 미아 프로세스(좀비 프로세스)
10. 스레드
11. wait()
12. 프로세스 제거
13. 프로세스 계층 구조
[별첨] 메모리 먹는 돼지, 크롬 + MS에서 발표한 해결책
최근에 많은 사람들이 인터넷 익스플로 보다는 구글의 크롬을 많이 사용한다.
과거 구글의 크롬은 빠른 속도와 안정성을 기반으로 인터넷 익스플로러를 무섭게 따라잡았다.
하지만 메모리를 많이 잡아 먹는다는 치명적인 단점이 있다고 평가 받아왔는데,
그 근본적인 이유는 독자적인 프로세스를 가지고 있기 때문이다.
우리가 웹 서핑을 할 때, 여러개의 창을 띄우게 된다.
탭이라고 불리며 하나의 창에 여러개의 탭을 뛰우는 것이다.
하지만 크롬은 인터넷 익스폴로와 달리 각각의 탭이
독자적으로 구동한다.
그렇기 때문에 개별적으로 최고의 속도를 내는 것이라고 할 수 있다.
오래동안 크롬을 사용하면
메모리 누설이 발생하여 컴퓨터가 느려지고 했는데,
MS에서 해법을 제시했다.
MS는 윈도우 10의 업데이트를 통해
WIN32프로그램의 메모리 사용량을 획기적으로 줄일 수 있는
Segment heap 기술을 도입했다.
MS는 이 기술을
크롬엔진이 탑재된 자사의 엣지브라우저에 먼저 적용하여
무료 27%나 메모리 사용 감소를 보였다.
이는 크롬의 오픈소스 베이스에도 기여되어 멀티 코오에서는 메모리를 수백 MB 까지도 절감할 것으로 보인다.
해당 기능은 곧 구글에서 공개할 것으로 전망된다고 한다.
참고 웹사이트
"프로세스와 스레드#1" B2CONNECTED 블로그. 2020년 7월 15일 접속,
https://m.blog.naver.com/ahn128/221498051260
"프로세스와 스레드#2" B2CONNECTED 블로그. 2020년 7월 15일 접속,
https://m.blog.naver.com/ahn128/221498051260
참고문헌
조성호.쉽게배우는 운영체제.2019발행.한빛아카데미