프로 세 스 데이터 구조 (중)

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
  • cap_permission 은 프로 세 스 가 사용 할 수 있 는 권한 을 표시 합 니 다.
  • cap_inheritable, 루트 에서 호출 자의 집합 을 계승 할 수 있 습 니 다.루트 사용자 가 아니면 보류 하지 않 습 니 다
  • cap_bset, 즉 capability bounding set 는 시스템 의 모든 프로 세 스 가 보류 할 수 있 는 권한 입 니 다.
  • cap_ambient 비 root 사용자 프로 세 스 가 exec 를 사용 하여 프로그램 을 실행 할 때 권한 을 어떻게 유지 하 는 지 에 대한 문제 입 니 다.exec 를 실행 할 때 capambient 는 cap 에 추 가 됩 니 다.allowed 중, 동시에 cap 로 설정effective 중.

  • 메모리 관리
    프로 세 스 마다 독립 된 가상 메모리 관리 공간 이 있 습 니 다. 데이터 구조 가 필요 합 니 다.
    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 표지 가 있 는 것 을 발견 했다. 이것 이 바로 암 호 를 수정 할 수 있 는 이유 이다.이 권한 을 없 애고 일반 사용자 로 비밀 번 호 를 수정 하면 권한 이 없다 는 것 을 알려 줍 니 다!이 예 와 선생님 의 게임 은 이 곡 동공 이 라 고 할 수 있 지만 더욱 보편성 을 가지 고 여러분 도 더욱 잘 알 고 있 습 니 다!

    좋은 웹페이지 즐겨찾기