운영 체제 (주로 Linux를 참조)를 연구하면서 내가 배운 자료에서 잘 설명되지 않은 몇 가지 사항이 있습니다.최신 운영 체제의 메모리 분할
메모리에로드 된 프로그램은 가상 메모리가 순전히 페이징을 기반으로하는 Linux와 같은 운영 체제의 컨텍스트에서도 텍스트, 데이터, 스택 등의 세그먼트로 구분되는 것으로 종종 설명됩니다. 세그먼트 화 된 메모리 자체가 아니라 프로그램 일 뿐인가? 그렇다면 용어가 혼란 스럽습니다.
malloc은 데이터 세그먼트의 크기를 늘리는 'sbrk'호출을 사용하여 Linux에서 구현 될 수 있음을 알았습니다. 다시 말하지만,이 '데이터 세그먼트'는 단지 '실제'세그먼트가 아닌 관례에 따라 데이터 용으로 사용되는 메모리 영역입니까? (추가 질문 : 'sbrk'는 '세그먼트'의 크기를 줄일 수있는 것 같지 않습니다. 프로세스가 메모리를 절대로 종료 할 수 없다는 뜻입니까?)
또한 관심이 있습니다. 현대 운영 체제가 세그먼트 화를 사용하지 않는 것 같은 이유를 알고 있습니다. 특정 종류의 공격이 자신의 보호 된 세그먼트에 코드가 상주하도록하여 보안을 강화하지 않을까요? 다른 한편으로, 이것은 예를 들어. JIT 컴파일 불가능/어려움?
위의 질문에 대한 "예"/ "아니오"답변 외에도 주제에 대한 통찰력있는 분석에 관심이 있습니다.
미리 감사드립니다.
도 *는 * 낮은 값으로 프로그램 중단을 설정할 수 있습니다'brk',있다. 그리고 세그먼트 *는 페이지로 분할되고 각 페이지는 실제로 읽기 전용이거나 실행 불가능할 수 있으며 따라서 텍스트 세그먼트와 ro 데이터 세그먼트는 일반적으로 설정됩니다. –