20150509 unix v6로 배우는 커널의 원리와...

12
[UNIX V6로 배우는 커널의 원리와 구조] 기본 구조체 정리 김지은 [email protected]

Transcript of 20150509 unix v6로 배우는 커널의 원리와...

Page 1: 20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은

[UNIX V6로배우는커널의원리와구조]기본구조체정리

김지은

[email protected]

Page 2: 20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은

기본구조체

• PSW, Processor Status Word

• 16bit register

• 구조체

Bit 의미

15~14 현재모드(00:커널, 11:사용자)

13~12 이전모드(00:커널, 11:사용자)

7~5 프로세서 우선순위(7~0)

4 트랩비트

3 N. Negative, 명령을 실행한 결과가 음수가 되었을 때 설정

2 Z. Zero, 명령을 실행한 결과가 0이 되었을때 설정

1 V. overflow, 명려을 실행한 결과 오버플로우가 발생했을 때 설정

0 C. carry, 명령을 실행한 결과 캐리가 발생했을 때 설정

Page 3: 20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은

기본구조체

• 범용레지스터

Bit 의미

r0., r1 계산용, 함수의 리턴값

r2, r3, r4 로컬 처리

r5 프레임포인터, 환경 포인터, 각 프로세스가 가진 스택의 처음 위치

r6(sp) 스택 포인터

r7(pc) 프로그램 카운터

Page 4: 20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은

기본구조체

• MMU(memory Managemnet Unit)

: 어드레스변환과접근권한관리, 2개의상태레지스터를가짐(SR0, SR2)

SR0

SR2

Bit 의미

15 설정에 맞지 않는 페이지를 접근하려 했을 때, 1

14 PDR이 표시하는 페이지 길이보다 바깥 영여긍ㄹ 액세스 했을때, 1

13 읽기 전용 영역에 값을 쓰려고 할 때, 1

8 유지보수모드

6~5 에러를 발생시킨 프로세스모드(00:커널, 11:사용자)

3~1 페이지 번호, 에러를 발생시킨 페이지를 참조하려는 경우 등에 사용

0 1이되면 MMU에서 메모리 관리를 활성화

Bit 의미

15~0 실행할 명령어의 가상 어드레스명령어를 가져오는 데 실패하면 값이 갱신되지 않음SR0[15~13]에 어떤 값이라도 1이면, 값이 갱신되어 원래 값을 읽어버림

Page 5: 20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은

기본구조체

• 프로세스상태정보및제어정보

- 한쌍의 Proc 구조체와 User 구조체로관리

- 프로세스마다각각한개씩할당

- Proc[]는메모리에상주, User[]는스와프아웃대상

Proc[], #define NPROC 50

Bit 의미

p_stat 상태, NULL인 경우 해당되는 PROC[]가 비었다고 판단

p_flag 플래그

p_pri 실행 우선순위, 값이 작을수록 우선순위가 높음

p_sig 수신된 시그널

p_uid 사용자 ID(정수형)

p_time 메모리나 스와프 영역에 머무른 시간(초)

p_cpu CPU 사용한 누적시간 (tick)

p_nice 실행 우선순위를 낮추기 위한 보정 값, 초기값은 0, nice 시스템 콜로 사용자가 값을 설정

p_ttyp 프로세스를 실해한 터미널

p_pid 프로세스 ID

p_ppid 부모 프로세스 ID

p_addr 할당받은 물리 메모리 어드레스(64bit 단위)

p_size 할당받은 메모리 크기(64bit 단위)

p_wcan 슬립 상태가 된 이유

*p_textp 사용중인 텍스트 세그먼트

Page 6: 20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은

기본구조체

• 프로세스상태정보및제어정보

프로세스상태, p_stat

플래그, p_flag

Bit 의미

SSLEEP 슬립, 실행 우선순위가 음수 값

SWAIT 슬립, 실행 우선순위가 0 이상의 값

SRUN 실행 가능 상태

SIDL 프로세스 생성 중

SZOMB 좀비상태

SSTOP 트레이스 개입을 기다림

Bit 의미

SLOAD 메모리에 있음(스와프아웃되지 않음)

SSYS 시스템 프로세스, 스와프대상 아님, UNIX V6에서 procp[0]만 가능

SLOCK 스와프 아웃이 되는걸 막음

SSWAP 스와프 아웃, user.u_rsav[]의 값이 부정됨

STRC 트레이스 중

SWTED 트레이스 처리에 사용

Page 7: 20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은

기본구조체

• 프로세스상태정보및제어정보

user[] : 프로세스가오픈한파일이나현재디렉터리정보등

Bit 의미

u_rsav[] 프로세스가 바뀔 때, 실행중인 r5, r6 저장

u_fsav[] PDP-11/40 환경에서는 사용하지 않음

u_segflh[] 파일을 읽고 쓸 때 사용하는 플래그

u_error 에러가 발생했을 떄 에러코드를 저장

u_uid 실제로 파일을 실행하는 사용자 ID

u_gid 실제로 파일을 실행하는 사용자 그룹 ID

u_ruid 실행될때 사용자 ID

u_rgid 실행될때 그룹 ID

*u_procp 이 user구조체에 대응된 Proc[] 엔트리를 가리킴

*u_base 파일을 읽고 쓸 때 매개변수를 넘겨 줄 때 사용

*u_count 파일을 읽고 쓸 때 매개변수를 넘겨 줄 때 사용

*u_offset[] 파일을 읽고 쓸 때 매개변수를 넘겨 줄 때 사용

*u_cdir 현재 디렉토리의 inode[] 엔트리

u_dbuf[] Namei()가 사용하는 작업영역, 파일, 디렉터리명 등을 저장

*u_dirp 사용자 프로그램, 혹은 커널 프로그램에서 가리키는 파일의 경로를 읽을 때 사용

u_dent Namei()가 사용된 작업 영역, 디렉터리 엔트리가 저장u_ino는 inode번호, u_name은 파일이나 디렉토리를 나타냄

Page 8: 20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은

기본구조체

• 프로세스상태정보및제어정보

user[] : 프로세스가오픈한파일이나현재디렉터리정보등

Bit 의미

u_pdir namei()에 대상이 되는 파일, 디렉터리의 부모 디렉터리를 저장

u_uisa[] 사용자 PAR 값

u_uisd[] 사용자 PDR 값

u_ofile[] 이 프로세스가 오픈한 파일

u_arg[] 사용자 프로그램에서 시스템 콜로 매개변수를 전달할 때 사용

u_tsize[] 텍스트 세그먼트 크기(64bit 단위)

u_dsize 데이터 영영 크기(64bit 단위)

u_ssize 스택 영역 크기(64bit 단위)

u_seq PDP-11/40 환경에서는 기본값이 0

u_qsav[] 시스템 콜을 처리 중에 시그널 처리가 발생했을 때 사용. r5, r6를 저장하는 곳

u_ssav[] 스와프 아웃 처리로 user.u_rsavp[]값이부정되었을 때 사용. r5, r6를 저장

u_signal[] 시그널을 수신했을 때 동작 설정을 위해서 사용

u_utime 사용자 모드로 CPU 사용 시간(tick)

u_stime 커널 모드로 CPU 사용 시간(tick)

u_cutime[] 자식 프로세스가 사용자 모드로 사용한 시간(tick)

u_sctime[] 자식 프로세스가 커널 모드로 사용한 CPU 시간(tick)

*u_ar0 시스템 콜 처리 시 사용자 프로세스의 범용레지스터나 PSW 조작을 할 때 사용

u_prof[] 프로파일 용

u_intlg[] 시스텐 콜 처리 중에 시그널 처리가 발생 했는지 판단하는 플래그

Page 9: 20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은

기본구조체

• 프로세스상태정보및제어정보

에러코드, u_error

Bit 의미

EFAULT 사용자 공간과 커널 공간 사이에 데이터 전송이 실패했을 때 등

EPERM 슈퍼 유저가 아님

ENOENT 지정된 파일이 없음

ESRCH 시그널을 받는 프로세스가 없거나 이미 사라짐

EINTR 시스템 콜 처리중에 시그널 처리를 했음

EIO I/O 에러

ENXIO 디바이스 번호가 가리키는 디바이스가 없음

E2BIG Ezec 시스템 콜로 실행 프로그램에 512 바이트가 넘는 매개변수 리스트를 넘김

ENOEXEC 실행 프로그램의 포맷이 잘못됨

EBADF 열리지 않은 파일을 조작하려고 했거나, 읽기전용, 혹은 쓰기 전용 모드로 열린 파일에 대하여 write, 혹은 read를 함

ECHILD Wait 시스템 콜로 자식 프로세스가 발견되지 않음

EAGAIN Fork 시스템 콜로 proc[]의 빈 엔트리를 찾을 수 없음

ENOMEM 프로세스가 사용가능한 메모리 용량보다 큰 메모리를 할당 하려고 함

EACCESS 파일, 디렉터리의 사용권한이 없음

ENTOBLK 블록 디바이스의 스페셜 권한이 없음

EBUSY Mount, unmounts 시스템 콜로 대상 마운트가 사용중

EEXIST Link 시스템 콜 등으로 이미 그 파일이 있을 때

Page 10: 20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은

기본구조체

• 프로세스상태정보및제어정보

에러코드, u_error

Bit 의미

EXDEV 디바이스 파일에 대하여 링크를 걸려고 함

ENODEV 디바이스 번호로 가리키는 디바이스가 존재하지 않음

ENOTDIR 디렉토리가 아님

EISDIR 디렉터리에 쓰려고 함

EINVAL 매개변수가 맞지 않음

ENFILE File[]이 넘침

EMFILE user.u_ofile[]이 넘침

ENOTTY 터미널의 스페셜 파일이 아님

ETXTBSY 텍스트 세그먼트를 할당받을 프로그램의 파일이 다른 프로세스의 데이터 파일로 사용됨, 또는 텍스트 세그먼트로 할당받은 파일에 쓰려고함

EFBIG 파일 크기가 큼

ENOSPC 블록 디바이스 용량이 부족함

ESPIPE 파이프 파일에 대하여 seek시스템 콜을 실행

EROFS 읽기 전용으로 마운트 된 블록 디바이스의 파일이나 디렉토리를 갱신

EMLINK 링크 수가 너무 많음

EPIPE 파이프 파일이 망가짐

Page 11: 20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은

기본구조체

• MMU는가상어드레스를물리어드레스로변환하기위해 PAR, PDR레지스터를가짐

• APR(Active Page Register) = PAR + PDR

PAR, Page Address Register

PDR, Page Description Register

Bit 의미

11~0 베이스 어드레스(64바이트 단위)

Bit 의미

14~8 페이지 블록 수

6 데이터 비트, 갱신됨을 의미

3 비트가 1이면, 큰 어드레스에서 작은 어드레스 방향으로 할당

2~1 접근제어00 : 할당하지 않음01: 읽기전용11: 쓰기 가능

Page 12: 20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은

이상입니다.

2015.05.11