스택과 운영체제

Pi11ar의 이미지

스택이 운영체제가 프로세스에 할당해준 메모리 공간으로 알고있습니다. 만약 그렇다면 운영체제가 없다면 push나 pop같은 어셈블리 명령어는 사용할수없나요?
늦은 저녁에 죄송하네요..

jeff_an의 이미지

load,save 같은 어셈코드는 명령어니까 운영체제 없이도 가능하죠.

jick의 이미지

(32bit x86 CPU 기준으로 말씀드립니다.)

CPU가 보기에 push는 그냥 단순히 "SS:ESP가 가리키는 주소에 해당 값을 집어넣고 ESP를 감소시켜라"라는 연산입니다. (pop은 반대.) 그렇기 때문에 SS:ESP가 제대로 된 주소를 가리키고 있다면 운영체제 유무와 무관하게 정상적으로 실행할 수 있습니다.

운영체제가 해주는 일은 SS:ESP가 제대로 된 영역을 가리키고 있도록 스택을 만들어주고 필요에 따라 스택 크기를 늘려주는 일입니다.

거꾸로, ESP는 일반 프로세스가 맘대로 바꿀 수 있기 때문에 엉뚱한 주소를 집어넣는다면 아무리 운영체제가 있어도 CPU가 에러를 발생시키게 됩니다. (일반적인 운영체제라면 이 때 segfault 혹은 비슷한 에러를 발생시키고 프로세스를 종료시키겠죠.)