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


+ Recent posts