PSW : Processor Status Word, 16비트 레지스터
범용 레지스터
r0 ~ r7
r5: 프레임 포인터, 환경 포인터
r6: 스택 포인터
r7: 프로그램 카운터
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | struct proc { char p_stat; // 상태, NULL인 경우 해당하는 PROC[]를 비었다고 판단 char p_flag; // 플래그 char p_pri; // 실행 우선순위, 값이 작을수록 우선순위가 높으며, 다음에 실행되기 쉬움 char p_sig; // 수신된 시그널 char p_uid; // 사용자 ID(정수형) char p_time; // 메모리나스와프 영역에 머물렀던 시간(초) char p_cpu; // CPU를 사용한 누적 시간(tick, 틱) char p_nice // 실행 우선순위를 낮추기 위한 보정 값, 초기값은 0으로 nice 시스템 콜로 사용자가 값을 설정함 int p_ttyp; // 프로세스를 실행한 터미널 int p_pid; // 프로세스 ID int p_ppid // 부모 프로세스 ID int p_addr; // 할당받은 물리 메모리 어드레스(64바이트 단위) int p_size // 할당받은 메모리 크기(64바이트 단위) int p_wchan; // 슬립 상태가 된 이유 int *p_textp; // 사용 중인 텍스트 세그먼트 }proc[NPROC]; struct user { int u_rsav[2]; // 프로세스가 바뀔 때, 실행 중인 r5, r6를 저장한 곳 int u_fsav[25]; // PDP-11/40 환경에서는 사용하지 않음 char u_segflg; // 파일을 읽고 쓸 때 사용하는 플래그 char u_error; // 에러가 발생했을 때 에러코드를 저장함 char u_uid; // 실제로 파일을 실행하는 사용자 ID(effective user id) char u_gid; // 실제로 파일을 실행하는 사용자 그룹 ID(effective group id) char u_ruid; // 실행될 때 사용자 ID(real user id) char u_rgid; // 실행될 때 그룹 ID(real group id) int u_procp; // 이 user 구조체에 대응된 proc[] 엔트리를 가리킴 char *u_base; // 파일을 읽고 쓸 때 매개변수를 넘겨 줄 때 사용함 char *u_count; // 파일을 읽고 쓸 때 매개변수를 넘겨 줄 때 사용함 char *u_offset[2]; // 파일을 읽고 쓸 때 매개변수를 넘겨 줄 때 사용함 int *u_cdir; // 현재 디렉터리의 inode[] 엔트리 char u_dbuf[DIRSIZ];// namei()가 사용하는 작업영역, 파일, 디렉터리명 등을 저장함 char *u_dirp; // 사용자 프로그램, 혹은 커널 프로그램에서 가리키는 파일의 경로를 읽을 때 사용함 struct { int u_ino; // u_ino는 inode 번호, u_name은 파일이나, 디렉터리를 나타냄 char u_name[DIRSIZ]; }u_dent; // namei()가 사용된 작업 영역, 디렉터리 엔트리가 저장됨 int *u_pdir; // namei()에 대상되는 파일, 디렉터리의 부모 디렉터리를 저장함 int u_uisa[16]; // 사용자 PAR의 값 int u_uisd[16]; // 사용자 PDR의 값 int u_ofile[NOFILE}; // 이 프로세스가 오픈한 파일 int u_arg[5]; // 사용자 프로그램에서 시스템 콜로 매개변수를 전달할 때 사용함 int u_tsize; // 텍스트 세그먼트 크기(64바이트 단위) int u_dsize; // 데이터 영역 크기(64바이트 단위) int u_ssize; // 스택 영역 크기(64바이트 단위) int u_sep; // PDP-11/40 환경에서는 기본값이 0 int u_qsav[2]; // 시스템 콜을 처리 중에 시그널 처리가 발생했을 때 사용함. r5, r6를 저장하는 곳 int u_ssav[2]; // 스와프 아웃 처리로 user.u_rsavp[]값이 부정되었을 때 사용함. r5, r6를 저장하는 곳 int u_signal[NSIG]; // 시그널을 수신했을 때 동작 설정을 위해서 사용함 int u_utime; // 사용자 모드로 CPU를 사용한 시간(tick) int u_stime; // 커널 모드로 CPU를 사용한 시간(tick) int u_cutime[2]; // 자식 프로세스가 사용자 모드로 사용한 시간(tick) int u_cstime[2]; // 자식 프로세스가 커널 모드로 사용한 CPU 시간(tick) int *u_ar0; // 시스템 콜 처리 시 사용자 프로세스의 범용레지스터나 PSW 조작을 할 떄 사용함 int u_prof[4]; // 프로파일용, 이 책에서는 다루지 않음 char u_intflg; // 시스템 콜 처리 중에 시그널 처리가 발생했는지 판단하는 플래그 }u; | cs |