프로세스의 메모리 부분

프로세스의 메모리 부분

교과서 "운영 체제 개념 문제 9"에 따르면. 프로세스의 메모리는 여러 부분으로 나뉩니다. 그 중 하나가 데이터 섹션입니다. 이 책에서는 다음과 같이 말합니다.

비공식적으로 앞서 언급했듯이 프로세스는 실행 프로그램입니다. 프로세스는 단순한 프로그램 코드 그 이상이며 때로는 텍스트 부분이라고도 합니다. 또한 프로그램 카운터 값과 프로세서 레지스터 내용으로 표시되는 현재 활동도 포함됩니다.

"현재 활동"이란 정확히 무엇을 의미하나요? 이는 프로세스의 프로그램 카운터와 프로세서 레지스터의 내용이 텍스트 섹션에 저장된다는 의미입니까?

답변1

실행 코드(텍스트 부분)는 읽기 전용이므로 "현재 활성"(프로세스)의 변수 값을 저장할 수 없습니다.

이 명령문은 프로세스 상태에 프로그램 카운터와 레지스터가 포함되어 있음을 나타냅니다. 프로세스가 활성 상태일 때 이들은 메모리에 있는 것이 아니라 CPU에 있습니다. 프로세스가 비활성 상태일 때 메모리에 저장됩니다.

Linux에서 컴파일된 프로그램은 바이너리 형식으로 저장됩니다.매우 낮은 주파수. 상황을 보고할 수 있는 유틸리티가 있습니다. 바이너리를 실행하여 이에 대한 느낌을 얻을 수 있습니다 nm -n -g.readelf -l

프로그램 콘텐츠는 보호 및 초기화 요구 사항에 따라 그룹화되므로 커널은 읽기 전용 페이지를 강제로 적용하고 로드 시 초기화를 방지할 수 있습니다. 메모리 레이아웃에 대한 설명은 다음에서 찾을 수 있습니다.Wikipedia의 "데이터 세그먼트" 기사;역사적으로 Unix에서 코드와 함께 텍스트 형식으로 저장되는 rodata(읽기 전용 데이터)를 생략합니다.

"현재 활동" 저장은 CPU 아키텍처에 따라 다릅니다. Linux에는 선점형 스케줄링 기능이 있습니다. CPU는 프로세스를 실행하고, 인터럽트를 받고, 다음 주기에 다른 작업을 실행할 수 있습니다. CPU 자체는 인터럽트 중에 프로그램 카운터, 프로세서 플래그 및 오류 코드와 같은 최소한의 컨텍스트를 스택에 푸시합니다. 그런 다음 인터럽트 설명자 테이블에 미리 구성된 커널의 주소로 점프합니다.

그런 다음 커널은 나머지 CPU 레지스터와 기타 컨텍스트를 저장해야 합니다. 왜냐하면 인터럽트 명령에서 복귀를 사용하여 결국 다시 시작되면 중단된 프로세스의 정확한 상태를 재구성해야 하기 때문입니다. 더 읽어보실 수 있습니다Linux의 인터럽트 처리가 여기에 있습니다..

관련 정보