안녕하세요 허언증입니다.
1. 프로세스
프로세스는 텍스트, 데이터, 사용자 스택, U-area 자료들이 들어있다. 텍스트는 프로그램 파일의 text segment를 그대로 복사한 것이고 데이터는 프로그램 파일의 data segment를 그대로 복사한 것이다. U-area= U-structure + 커널 스택으로 구성되어 있다. System call을 통해 fork()명령이 들어오면 proc table을 생성하고 proc table 생성이 완료가 되면 U-area 테이블을 생성한다.
2. U-area란?
U-area란 프로세스가 실행하면서 사용하는 여러 가지 자료들이 저장되어 있다. 정확한 명칭은 User-area이다. 프로세스가 수행중일 때만 주기억장치에 맵핑되고 접근이 가능하다.
3. U-area의 주요자료는?
첫 번째는 프로세스 제어 블록 이다. 이는 구동시 필요한 정보를 담고 있다. 두 번째는 프로세스의 proc 자료 구조를 가르치키는 포인터이다. U-area는 서로 비슷한 자료를 담고 있고 맵핑을 하고 있는데 proc에 접근을 하기 위해 포인터를 가지고 있다. 세 번째는 real UID, real GID, effective UID, effective GID 이다. UID, GID에서 알 수 있듯 관리자 권한을 말한다. UID(User ID) : 프로세스를 소유하는 사용자 계정을 식별하는 번호, 프로세스에 대한 사용자 권한을 알 수 있다. GID(Group ID) : 그룹 식별 번호이다. 그 중에서 effecitve UID는 sticky bit 권한에 상관없이 소유자만 지울 수 있는 비트이다. 네 번째로 에러 상태 정보를 알려주는데 에러 정보를 갖고 있다가 나중에 해당 에러를 알려주고 제거할 때 사용한다. 다섯 번째는 시그널 핸들러 및 관련 정보 인데 흔히 우리가 사용하는 ctrl+c 이다. System call에서 핸들러 정보를 보고 Ctrl+c를 실행한다. 여섯 번째는 프로그램 헤더에 저장된 정보들을 가지고 있다. 일곱 번째는 현재 디렉토리 및 vnode 포인터를 갖고 있는데 파일 시스템에서 관리하는 정보 값을 vnode 포인터로 불러와서 사용한다. 마지막 여덟 번째는 CPU 사용 통계량이 있다.
4. proc table이란?
프록 테이블은 U-area 테이블 보다 더 큰 범위에 있다고 생각하자. 더 쉽게말하면 proc table이 부모이고 U-area table이 자식이다. proc talbe은 다양한 U-area table을 관리하는 것으로 보인다. 즉 프로세스가 구동을 하던 안 하던 항상 접근이 가능한 상태이고 그에 반해 U-area table은 구동중에만 접근이 가능한 테이블이다. 잠시 생각을 해보니까 동기화 때문에 테이블 두 개를 분리해서 관리하는 것인가?? 라고 생각을 해 보았다.
5. proc table의 주요자료는?
첫 번째로 프로세스 제어 블록이 있다. 프로세스가 수행중이지 않을 때 하드웨어 문맥을 저장한다. 두 번째로 프로세스의 proc 자료 구조를 가르키는 포인터가 있다. 이 기능은 다음 프로세스정보들을 말한다. 세 번째로는 real UID, real GID, effective UID, effective GID 이다. 위에 설명을 했으므로 생략을 한다. 네 번째로는 현재 시스템 호출에 대한 인수, 복귀값 또는 에러 상태 정보이고 마지막으로 시그널 핸드러 및 관련 정보이다. U-area 테이블에 있는 내용을 가지고 있다. 이로 보아 세부적인 관리는 U-area에서 하고, 순수 프로세스 테이블들만 관리하는 것으로 보인다. 그로인해 가동중이지 않을 때도 접근이 가능하게 해야 하는 것이 아닐까?? 책 마지막에 보면 A프로세스가 다른 B프로세스의 정보가 필요할 때가 있는데 이럴 때 proc table을 이용해서 접근 한다고 설명이 되어 있다.
'# OS > [ Linux ]' 카테고리의 다른 글
[허언증/리눅스] 가상 파일시스템(VFS - Virtual FileSystem) / 슈퍼블록(SuperBlock) (0) | 2020.04.17 |
---|---|
[허언증/리눅스] System Call 이란? (feat. linux) (2) | 2020.03.24 |
[허언증/리눅스] Linux 네임서버 구축 (DNS서버) (0) | 2020.03.13 |
[허언증/리눅스] Linux 네임서버 개념 및 구조 (DNS서버) (0) | 2020.03.13 |
[허언증/리눅스] 캐싱 전용 네임 서버 설치 및 접속 (linux) (0) | 2020.03.12 |