본문 바로가기

Computer Science/컴퓨터구조

[컴퓨터 구조] 스택 구조

이 글은 www.youtube.com/watch?v=9OyG5YWwLCY&list=PLc8fQ-m7b1hD4jqccMlfQpWgDVdalXFbH&index=35 보고 공부한 글 입니다.

 

스택 구조

대부분 메모리의 일부를 별도로 할당해서 스택을 만든다.

 

레지스터 스택

0~63번까지는 주소이다.

스택에 데이터를 넣고 싶다면 DR에다가 먼저 데이터를 집어넣는다

SP는 스택 포인터로 레지스터이다. 스택의 제일 꼭대기를 가리키고 있다.

fullempty 플립플롭이 있다. 스택이 꽉차면 full1스택이 아무 것도 없다면 empty1이 된다.

 

PUSH 동작

SP <- SP +1
M[SP] <- DP
if (SP = 0 then (FULL <- 1)
EMPTY <- 0

 

스택 포인터 맨 위에서 하나를 증가시키면 0으로 간다. 0을 가리키고 있지만 full이다.

 

POP동작

DR<- M[SP]
SP <- SP – 1
if (SP = 0) then (EMPTY <- 1)
FULL <- 0

 

메모리 스택

메인 메모리의 일부분을 스택으로 쓴다.

 

메모리 스택에서 PUSH동작

SP <- SP – 1 (설정한 메모리 스택이 스택이 늘어나면 주소가 감소하게끔 설정됨)
M[SP] <- DR

메모리 스택에서 POP동작

DR <- M[SP]
SP <- SP + 1 (
설정한 메모리 스택이 스택이 늘어나면 주소가 감소하게끔 설정됨)

 

 

 

메모리 세그먼트

프로그램을 cpu가 동작시키기 위해 임의로 나눠놓은 메모리의 구역
그 구역을 세그먼트라고한다.

UNIX에서는 페이지, 블록이라고 한다.

모든 프로그램은 3개의 구역(세그먼트)을 가진다.


Code /Data /Stack(Heap)

 

스택 오버플로우

스택의 크기가 꽉 차을 때 넣으려고 하면 에러가 난다.

스택의 크기를 벗어나는 SP값을 넣을 때 발생
Protected mode
에서 발생

 

연산자 표기 방식

Infix A + B
Prefix(polish) +AB
Postfix(reverse polish) AB+

스택은 reverse polish 방식을 쓴다.

 

 

3을 가져오고4를 가져오고 그 다음 *를 해야 한다.

3,4pop 하고 연산한다음 다시 stack에 넣는다.
5,6
pop 하고 연산한다음 다시 stack에 넣는다.
12,30
pop하고 연산한다음 다시 stack에 넣는다.

 

728x90