프로 세 스 데이터 구조 (중)
9347 단어 운영 체제
프로 세 스 가 실행 되 는 과정 에서 통 계량 이 있 을 수 있 습 니 다. 구체 적 으로 아래 의 표를 볼 수 있 습 니 다. 이 안 에는 프로 세 스 가 사용자 상태 와 커 널 상태 에서 소모 하 는 시간, 문맥 전환 횟수 등 이 있 습 니 다.
u64 utime;// CPU
u64 stime;// CPU
unsigned long nvcsw;// (voluntary)
unsigned long nivcsw;// (involuntary)
u64 start_time;// ,
u64 real_start_time;// ,
프로 세 스 친연 관계
struct task_struct __rcu *real_parent; /* real parent process */
struct task_struct __rcu *parent; /* recipient of SIGCHLD, wait4() reports */
struct list_head children; /* list of my children */
struct list_head sibling; /* linkage in my parent's children list */
parent 는 아버지 프로 세 스 를 가리 키 고 있 습 니 다.종료 할 때 부모 프로 세 스에 신 호 를 보 내야 합 니 다.children 은 체인 시계의 머리 를 나타 낸다.링크 의 모든 요 소 는 하위 프로 세 스 입 니 다.sibling 은 현재 프로 세 스 를 형제 링크 에 삽입 하 는 데 사 용 됩 니 다.bash 에 GDB 를 사용 하여 프로 세 스 를 debug 한다 면, 이때 GDB 는 parent (SIGCHLD 의 회수 자) 이 고, bash 는 이 프로 세 스 의 real 입 니 다.parent.
프로 세 스 권한
Linux 에서 프로 세 스 권한 에 대한 정 의 는 다음 과 같 습 니 다.
/* Objective and real subjective task credentials (COW): */
const struct cred __rcu *real_cred;
/* Effective (overridable) subjective task credentials (COW): */
const struct cred __rcu *cred;
그 중, realcred 는 누가 이 프로 세 스 를 조작 할 수 있 는 지 설명 하 는 것 이 고, cred 는 내 프로 세 스 가 누 구 를 조작 할 수 있 는 지 설명 하 는 것 이다.cred 의 정 의 는 다음 과 같 습 니 다.
struct cred {
......
kuid_t uid; /* real UID of the task */
kgid_t gid; /* real GID of the task */
kuid_t suid; /* saved UID of the task */
kgid_t sgid; /* saved GID of the task */
kuid_t euid; /* effective UID of the task */
kgid_t egid; /* effective GID of the task */
kuid_t fsuid; /* UID for VFS ops */
kgid_t fsgid; /* GID for VFS ops */
......
kernel_cap_t cap_inheritable; /* caps our children can inherit */
kernel_cap_t cap_permitted; /* caps we're permitted */
kernel_cap_t cap_effective; /* caps we can actually use */
kernel_cap_t cap_bset; /* capability bounding set */
kernel_cap_t cap_ambient; /* Ambient capability set */
......
} __randomize_layout;
이 이름 을 보 자마자 이것 이 작용 한 다 는 것 을 알 았 다.이 프로 세 스 가 메시지 큐, 공유 메모리, 신 호 량 등 대상 을 조작 하려 고 할 때 사실은 이 사용자 와 그룹 이 권한 이 있 는 지 비교 하 는 것 입 니 다.누가 시작 한 프로 세 스 는 시작 한 사용자 에 게 이 권한 이 있 는 지 심사 해 야 합 니 다.chmod u + s program 명령 을 통 해 이 게임 프로그램 에 set - user - ID 의 표지 위 치 를 설정 할 수 있 습 니 다.만 든 프로 세 스 uid 는 당연히 사용자 A 이지 만 euid 와 fsuid 는 사용자 A 가 아 닙 니 다. set - user - id 표 지 를 보 았 기 때문에 파일 소유자 의 ID 로 바 뀌 었 습 니 다. 즉, euid 와 fsuid 는 모두 사용자 B 로 바 뀌 었 습 니 다.하나의 프로 세 스 는 언제든지 setuid 를 통 해 사용자 ID 를 설정 할 수 있 습 니 다.Liux 의 최고 권한 은 root 입 니 다. 일반 사용 자 는 일반 권한 입 니 다. capabilities 를 도입 할 수 있 습 니 다. capability. h 에서 정의 할 수 있 는 권한 을 비트 맵 으로 표시 합 니 다.여기 몇 개 열거 하 겠 습 니 다.
#define CAP_CHOWN 0
#define CAP_KILL 5
#define CAP_NET_BIND_SERVICE 10
#define CAP_NET_RAW 13
#define CAP_SYS_MODULE 16
#define CAP_SYS_RAWIO 17
#define CAP_SYS_BOOT 22
#define CAP_SYS_TIME 25
#define CAP_AUDIT_READ 37
#define CAP_LAST_CAP CAP_AUDIT_READ
메모리 관리
프로 세 스 마다 독립 된 가상 메모리 관리 공간 이 있 습 니 다. 데이터 구조 가 필요 합 니 다.
struct mm_struct *mm;
struct mm_struct *active_mm;
파일 및 파일 시스템
프로 세 스 마다 파일 시스템 의 데이터 구조 가 있 고 파일 을 여 는 데이터 구조 가 있 습 니 다.이것 은 우리 가 파일 시스템 의 그 절 에 놓 고 상세 하 게 설명 할 것 이다.
/* Filesystem information: */
struct fs_struct *fs;
/* Open file information: */
struct files_struct *files;
setuid 는 권한 이 있 는 특수 한 플래그 비트 입 니 다. 이 플래그 비트 를 가지 고 파일 에 루트 와 같은 권한 을 실행 할 수 있 습 니 다!예 를 들 어 Linux 에서 암 호 를 수정 하 라 는 명령 인 passwd 는 우리 ls 가 보 러 갔 을 때 그 권한 에 s 표지 가 있 는 것 을 발견 했다. 이것 이 바로 암 호 를 수정 할 수 있 는 이유 이다.이 권한 을 없 애고 일반 사용자 로 비밀 번 호 를 수정 하면 권한 이 없다 는 것 을 알려 줍 니 다!이 예 와 선생님 의 게임 은 이 곡 동공 이 라 고 할 수 있 지만 더욱 보편성 을 가지 고 여러분 도 더욱 잘 알 고 있 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Shell 기본 동작스 크 립 트 에 전 달 된 모든 인 자 를 단일 문자열 로 표시 합 니 다. PS: $@ 과 $의 차이 점: (1) 방문 할 때 argA = $@ 이 라 고 쓰 면;argB = $, argA 는 argB 와 같 습...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.