UNIX 분야의 주제가 u
올라왔습니다댓글에서. 저게 뭐에요?
답변1
AT&T Unix와 역사적으로 BSD에는 프로세스만 있고 프로세스 테이블의 각 항목은 struct proc
구조와 struct user
구조라는 두 부분으로 구성됩니다. 전자는 항상 커널 메모리에 상주합니다. 후자는 교환 프로세스의 일부로 교환될 수 있습니다. (이것은 실제로 Unices에 있다는 것을 기억하십시오.교환된것보다는 것들요청 시 페이징그들을. )
이 struct user
구조는 "u-zone"으로도 알려져 있습니다. 이는 영리한 메모리 매핑 덕분에 현재 프로세스의 user
구조가 항상 커널 메모리의 동일한 고정 가상 주소에 위치하며 u
(포인터가 아닌) 전역 기호를 통해 코드에서 참조될 수 있기 때문입니다.
이 구조에는 파일 생성 마스크, 열린 파일 설명자 테이블, 리소스 제한 등을 포함하여 프로세스가 현재 실행 중인 프로세스가 아닐 때 커널에 필요하지 않은 다양한 사항이 포함되어 있습니다. 신호의 주소가 포함되어 있습니다.매니저이는 프로세스가 실행 중이고 핸들러를 호출하려고 할 때만 필요하며 신호 차단이나 보류 중인 신호 세트에 대한 마스크는 아닙니다. 둘 다 프로세스가 교체될 때 필요하므로 struct proc
일부 Unices에서는 매개변수도 포함합니다. 현재 I/O 작업을 스택에 전달하는 대신
물론 이 디자인의 근거는 오래 가지 못했습니다. 1980년대 후반에는 거의 쓸모가 없어졌습니다. 전역 변수와 영리한 메모리 매핑은 결국 포인터를 통한 간단한 간접 참조로 대체되었습니다. 이 파일 은 struct user
BSD( Resources )의 C 라이브러리 헤더 파일에 여전히 존재 <sys/user.h>
하지만 주로 소스 코드 호환성을 위해 존재합니다. XNU에서, 실제로는 빈 구조로 선언됩니다. FreeBSD 노트이는 a.out 형식으로 실행되는 코어 덤프에 사용되기 때문에 주로 존재합니다. 리눅스는 아이디어가 쓸모없게 될 때까지 존재하지도 않았고, 실제로도 그렇게 하지 않습니다.
이 디자인에는 약간의 변동이 있습니다. 예: AT&T Unix System 5에는 struct euser
일부 콘텐츠가 포함된 구조 필드가 가리키는 "확장 사용자 영역"이 있습니다. 이것은 또 다른 요점을 보여줍니다. 모든 멤버 변수의 이름 지정은 당시의 C 커널 코딩 규칙과 초기 언어 규칙을 따릅니다. u_euserp
u
struct user
u_something
umask
이런 이름이 붙은 이유도 이것 때문인 것 같아요, 확실하지는 않지만.
추가 읽기
- 스티브 D. 페이트(1996). UNIX 내부: 실용적인 접근 방식. 애디슨-웨슬리. ISBN 9780201877212.
- 바흐, 모리스 J. (1987).Unix® 운영 체제의 설계. 프렌티스 홀. ISBN 0132017571.