메모리 레이아웃을 살펴보자
커널 |
os |
스택 |
위에서부터 쌓이고, 밑에서 부터 사용한다. |
공유 라이브러리 |
|
힙 |
동적 메모리 |
data |
초기화 된 변수, 전역변수 |
text |
code |
*명령어는 cpu에 저장되어있으며, 버스를 통해 전달될수 있다.
대략적인 레이아웃은 이렇게 형성 된다.
여기서 스택에 관해 좀더 살펴보면,
* 스택
커널 영역을 건들면 안되기때문에 높은곳에서 부터 쌓이기 시작하고, 밑에서 부터 사용한다.
쌓이는 순서 | 사용하는 순서 |
1 |
3 |
2 |
2 |
3 |
1 |
이를 보고 LIFO( 마지막에 들어온것이 먼저쓰인다.) 라고 한다.
스택은 지역변수이며, 포인터 또한 마찬가지이다.
virtual memory 와 비교하여 살펴보면
예)
A |
B |
C |
A와 B와 C의가상 메모리가 존재하고
서로는 데이터를 주고받을 수 없다.
이는 8086 컴퓨터의 단점을 해소하는것이다.
8086 컴퓨터는 영역을 침범하면서 문제가 생기는데
예를 들면 ,
E |
D |
C |
B |
A |
이 표처럼 영역을 나눠서 생각해보면 이해하기 쉽다.
A의 영역에서 데이터가 더 쌓일경우, B의 영역을 침범하게 되고, 영역을 침범당한 B는 그대로 주저앉아버린다.
또, E의 영역에서 데이터가 더 쌓일경우, A의 영역을 침범하게 되고, 영역을 침범당한 A또한 주저앉아버린다.
그에 반해, 가상 메모리의 경우 서로 영역을 침범하지 않기때문에, 문제가 생길일이 줄어들고, 또한 필요한 데이터는 페이징을 통해 cpu에서 가져온다.
또한 A메모리와 B메모리가 같은 라이브러리를 사용할경우, 이를 공유하게 되는데 , 이를 공유 라이브러리 라고 한다.
그리고 이러한 가상 메모리는 메모리를 효율적으로 쓰고, 현재 사용중인 메모리만 cpu에 저장하게 된다.
'어셈블리' 카테고리의 다른 글
어셈블리 leave , ret 뿌시기 (0) | 2019.07.28 |
---|
댓글