위 포스트는 udacity의 Introduce to Operating Systems by Geogia Tech 를 참고하였습니다.
추가로 이 곳 을 참고하였습니다.
1) Process
OS는 추상화를 통해서 하드웨어를 지원한다고 하였는데요,
그러한 추상화 중 대표적인 녀석이 바로 Process입니다.
이번에는 프로세스에 대해서 알아보도록 하겠습니다.
1. What is a processes?
프로세스가 무엇인지 알기 위해서는 어플리케이션과 구별할 필요가 있습니다.
-
어플리케이션(static entity)
- 디스크, 플래시메모리에 저장됨.
- 실행되지않음
-
프로세스(active entity)
-
어플리케이션이 시작될 때 나타남.
-
이 때, 메모리에 어플리케이션이 load되는데, 그것을 프로세스라고 부른다.
-
즉, 실행중인 어플리케이션의 상태를 나타내는 도구이다.
ex) 유저의 인풋을 기다림, 다른 프로세스가 cpu에서 작동하는걸 끝나길 기다림.
-
2. What does a process looks like?
이번엔 프로세스의 구조에 대해서 알아봅시다.
-
- Capsulate(캡슐화)
-
하나의 프로세스는 생성될 때 부터 v0 ~ vMax 까지의 주소공간을 할당받습니다.
무조건 이 공간은 이 프로세스만의 것이므로, 일종의 캡슐로 둘러싸인다고 생각해도 좋을 것 같습니다.
-> 이 캡슐안에서 프로세스의 state들은 주소를 통해 구분됩니다.
-
Types of state
-
text, data
처음으로 프로세스가 생성될 때의 기록을 가지고 있음. (변하지 않음)
-
heap, stack
실행도중에 동적으로 생성되는 state입니다.
heap : 메모리 할당될때마다 생성, 임시결과 저장
stack : 얘도 동적으로 생성/축소를 반복하는데, LIFO 형식이라서 장점이 있음.
EX)
프로세스 일부분(A) 실행되다가 갑자기 다른 부분(B)을 급히 실행해야 할 때
- 실행되고 있는 프로세스 A의 위치를 스택에 저장한다.
- B를 콜한다
- 스택에 의해서 B가 끝나면 A를 다시 콜하여 마저 실행한다.
-
3. 프로세스 주소공간
이전 강의에서 프로세스의 state들은 주소를 통해서 구분된다고 했는데, 이 주소들이 담긴 공간을 주소공간(address space)라고 합니다. 이번에는 address space에 대해서 알아보도록 합시다!
-
address space : in memory representation of a process
-
프로세스의 상태를 나타내는 주소들이다.
-
- virtual addresses 라고도 불림
-
실제로 변수를 저장하는게 아니라 메모리에 저장된 위치정보를 가짐
물론 memory(physical memory)의 주소와 직접 대응되는건 아니다!
memory management를 통해서 이루어진다.
-
-
memory management (ex, page table)
- 이것을 담당하는 객체 : memory management hardward & operating system
-
virtual address와 physical memory의 맵핑을 담당함.
- 누군가가 어떤 프로세스의 주소에 변수 x를 할당하려 하면, 실제로는 변수 x가 할당되는게 아니라 메모리에 할당되고, 맵핑만 해주는 식이다.
4. 주소공간과 메모리관리
memory management(physical memory와 virtual address의 맵핑)을 어떻게 하는지 대략적으로 알아보도록 합시다.
-
서론
-
실질적으로 Virtual address 전체를 다 쓸 이유가 없음. (빈곳이 많기 때문)
-
만약 다 쓰다가는 physical memory도 한계가 생길 수도 있음.
(왜냐하면 32 bit addressing을 한다고 할 때, 가상공간의 길이는 2^31이며, 이는 4기가바이트 가까이 됨.)
-
그래서 OS는 동적으로 (dynamically decide) 어떤 주소(부분)의 프로세스가 physical memory에 맵핑될지를 정해야합니다 : Process Management
-
-
Process Management
-
Memory는 한계가 있기 때문에 상대적으로 덜 중요한 프로세스는 Disk로 이동시킵니다. (Swap이라고 부름.)
물론 다시 중요해지면 메모리로 다시 옮깁니다.
-
이러한 작업을 하기 위해서 OS는 프로세스에 대한 정보를 저장해야합니다.
-
Virtual memory의 각 부분이 어디에 맵핑되는지에 대한 정보
(page table)
- -> 이런 정보를 이용해서 Validity(유효성) 검사에도 참고할 수 있습니다.
-
이 프로세스가 실제로 메모리에 접근하는것이 허용된것인지?
-
-