프로그램카운터는 어디에 저장되나요 ?

ng0301의 이미지

안녕하세요 !
항상 공부하다면서 눈팅만 하던 KLDP에 드디어 가입하고 첫 질문을 하게 되었습니다...
OS를 공부하고 있는데, 프로세스 부분에서

프로세스는 데이터 셋이다.. 스택 힙 데이터섹션, 프로그램카운터 ...

라고 나오는데요, 프로그램 카운터는 프로세스의 어느부분에 저장이 되나요 ?
Stack? Heap? Data? Text? 궁금하네요~

shint의 이미지

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

ng0301의 이미지

책을 계속 넘기면서 공부하다보니까
PCB (Process Control Block)에 있는 레지스터에 저장된다네요~
여전히 의문은 프로세스는 메모리에 올라와 잇는거고 레지스터는 CPU에 있는 물리적인게 아닌가 하는 생각인데...

공부하는 대학생 꿈나무 프로그래머 입니다 !

태훈의 이미지

프로세스가 실행되던 CPU 상태(레지스터 값들)을 메모리에 있는 PCB에 저장합니다.
프로세스가 실행되던 중에 문맥 교환(Context Switch)을 하게 되면 현재 CPU의 상태를 현재 프로세스의 PCB에 저장하고,
스케쥴러에 의하여 프로세스가 다음번에 다시 CPU를 선점하게 되면 CPU 상태를 PCB에 저장된 CPU 상태 값으로 설정하여 프로세스 실행을 재개합니다.
물론, PCB에는 프로세스의 CPU 상태 이외에도 프로세스 제어와 관련된 많은 정보들이 들어 있습니다.

실제 구현 측면에서는 스케쥴링 단위가 되는 것은 프로세스가 아닌 쓰레드이므로, TCB(Thread Control Block)에 CPU 상태가 저장됩니다.
쓰레드마다 각자 스택을 가지고 있고, 스택은 사용자 모드 스택과 커널 모드 스택이 따로 존재하는데, 커널 모드 스택의 상위 공간을 TCB 용도로 많이 사용합니다.

OS는 OS만 공부하면 잘 와닿지 않습니다. 아키텍처 공부와 병행하시는 것을 추천해드리겠습니다.

Just do it!

태훈의 이미지

PC(Program Count)는 아키텍처에서 다음번 수행할 코드의 메모리 주소를 나타내는 것입니다. 아키텍처 관련 공부를 해보시는 것을 추천해드리겠습니다.

추천 서적> 컴퓨터 구조 및 설계

프로세스는 메모리에 로드되어 있고, 메모리에 있는 프로세스의 코드 주소가 PC에 하나씩 저장됩니다. CPU는 PC 번지에 있는 프로세스 코드를
메모리에서 CPU로 읽어와서(fectch) 하나씩 실행하게 되는 것이죠. PC는 다음번 수행할 코드의 메모리 번지로 증가하구요. (32비트 머신은 +4번지씩 증가합니다.)

Just do it!

iamt의 이미지

레지스터에도 저장돼고 PCB에도 저장돼는거죠.

레지스터에는 수행할때 저장돼구요 PCB에는 다른 프로세스가 잡스케쥴링때문에 CPU에서 비켜줘야 할상황때문에 "이까지했어" 하고 적어주는거예요 ^^

---------------------------------------------------------------------------------
C(++)과 php 펄등을 공부하고있습니다.
반갑습니다! 리눅스 :-)