2015. 12. 28. 17:42ㆍ프로그래밍/시스템
+프로세스?
실행중인 프로그램 ( 심플하다 )
메모리 공간에 프로그램의 실행 바이너리 코드가 올라간다 -> 프로그램이 프로세스가 된다
+프로세스의 메모리 구성
Data 영역 : 전역변수, Static 변수 할당을 위해 존재하는 영역
Stack 영역 : 지역변수 할당과 함수 호출 시 전달되는 인자값들의 보관을 위해 존재하는 영역
Heap 영역 : 동적할당을 위해서 존재하는 영역
Code 영역 : 실행파일을 구성하는 명령어들이 올라가는 영역
+프로세스의 스케줄링 ( Process Scheduling )
-스케줄링?
CPU 는 하나이고 실행 중인 프로세스가 다수 일 때,
프로세스의 CPU 할당 순서를 결정짓는 일
프로세스마다 우선순위가 정해져있고, 이 순위에 따라 CPU에 의해 실제 실행할 프로세스를 결정한다.
-프로세스 상태
일반적으로, 프로세스가 실행되는 과정에서 많은 시간을 I/O 에 할당한다.
I/O 는 데이터의 입출력 및 네트워크로 연결된 호스트와 데이터 송수신 등을 의미한다.
프로세스의 생성과 실행, 소멸까지의 흐름을 이해하는 것이 중요하다.
각 상태의 정의부터 해보자.
Running : CPU에 의해 실제로 실행중인 프로세스 상태
Ready : 자신의 CPU 할당(실제 실행)을 대기하고 있는 프로세스 상태
Blocked: 일반적으로, I/O 중인 프로세스들의 상태라고 보면된다.
현시점으로 CPU에 의해 실행될 수 없는 프로세스들을 잠시 Blocked 로 놓아서 I/O 작업을 수행한다. (그림 4번)
그리고 그림 2번을 수행하여 효율적인 멀티프로세스를 도모한다.
I/O 가 완료된 프로세스들은 Ready 상태로 바뀌어 다시 Running 상태가 되길 대기한다 ( 그림 5번 )
+컨텍스트 스위칭 ( Context Switching )
실행중인 프로세스 ( Running 상태의 프로세스 )를 변경하는 것은 시스템 부하가 크다.
why? CPU 의 레지스터들은 현재 실행중인 프로세스의 데이터들로 채워진다.
실행할 프로세스의 데이터들을 채우는 작업이 시스템 부하가 크다.
B 프로세스가 있다고 해보자.
B는 Reday 상태에 있고, B의 데이터들도 같이 메모리에 보관 중에 있다.
B 가 Running 상태로 바뀌게 되면,
메모리에 보관중이던 B 데이터들을 CPU 레지스터에 올라가있던 A 데이터 ( Running 중이던 프로세스 데이터 )와 바꾼다.
-> 이 작업이 Context Switching 이다. 이 작업이 시스템부하가 크다. 이 작업이 멀티프로세스의 단점이다.
'프로그래밍 > 시스템' 카테고리의 다른 글
1-6. 커널오브젝트와 프로세스 (0) | 2015.12.28 |
---|---|
1-3. 운영체제 32bit vs 64bit (0) | 2015.12.20 |
1-4. 메모리 접근 방식 (0) | 2015.12.20 |
1-2. 문자셋 ( CharacterSet ) (0) | 2015.12.20 |
1-1. 프로그램의 실행과정 (0) | 2015.12.16 |