SlideShare a Scribd company logo
1 of 12
Download to read offline
[UNIX V6로 배우는 커널의 원리와 구조]
기본 구조체 정리
김지은
yeswldms@gmail.com
기본 구조체
• 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, 명령을 실행한 결과 캐리가 발생했을 때 설정
기본 구조체
• 범용레지스터
Bit 의미
r0., r1 계산용, 함수의 리턴값
r2, r3, r4 로컬 처리
r5 프레임포인터, 환경 포인터, 각 프로세스가 가진 스택의 처음 위치
r6(sp) 스택 포인터
r7(pc) 프로그램 카운터
기본 구조체
• 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이면, 값이 갱신되어 원래 값을 읽어버림
기본 구조체
• 프로세스 상태 정보 및 제어 정보
- 한 쌍의 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 사용중인 텍스트 세그먼트
기본 구조체
• 프로세스 상태 정보 및 제어 정보
프로세스 상태, 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 트레이스 처리에 사용
기본 구조체
• 프로세스 상태 정보 및 제어 정보
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은 파일이나 디렉토리를 나타냄
기본 구조체
• 프로세스 상태 정보 및 제어 정보
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[] 시스텐 콜 처리 중에 시그널 처리가 발생 했는지 판단하는 플래그
기본 구조체
• 프로세스 상태 정보 및 제어 정보
에러코드, 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 시스템 콜 등으로 이미 그 파일이 있을 때
기본 구조체
• 프로세스 상태 정보 및 제어 정보
에러코드, u_error
Bit 의미
EXDEV 디바이스 파일에 대하여 링크를 걸려고 함
ENODEV 디바이스 번호로 가리키는 디바이스가 존재하지 않음
ENOTDIR 디렉토리가 아님
EISDIR 디렉터리에 쓰려고 함
EINVAL 매개변수가 맞지 않음
ENFILE File[]이 넘침
EMFILE user.u_ofile[]이 넘침
ENOTTY 터미널의 스페셜 파일이 아님
ETXTBSY 텍스트 세그먼트를 할당받을 프로그램의 파일이 다른 프로세스의 데이터 파일로 사용됨, 또는 텍스트 세그먼트로 할당받
은 파일에 쓰려고함
EFBIG 파일 크기가 큼
ENOSPC 블록 디바이스 용량이 부족함
ESPIPE 파이프 파일에 대하여 seek시스템 콜을 실행
EROFS 읽기 전용으로 마운트 된 블록 디바이스의 파일이나 디렉토리를 갱신
EMLINK 링크 수가 너무 많음
EPIPE 파이프 파일이 망가짐
기본 구조체
• 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: 쓰기 가능
이상입니다.
2015.05.11

More Related Content

What's hot

도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespaceSam Kim
 
Ryu with OpenFlow 1.3, Traffic Monitor
Ryu with OpenFlow 1.3, Traffic MonitorRyu with OpenFlow 1.3, Traffic Monitor
Ryu with OpenFlow 1.3, Traffic Monitorjieun kim
 
Introduction to Linux #1
Introduction to Linux #1Introduction to Linux #1
Introduction to Linux #1UNIST
 
[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7Ji-Woong Choi
 
ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)Chulgyu Shin
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback흥배 최
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기흥배 최
 
도커 없이 컨테이너 만들기 3편
도커 없이 컨테이너 만들기 3편도커 없이 컨테이너 만들기 3편
도커 없이 컨테이너 만들기 3편Sam Kim
 
Free rtos seminar
Free rtos seminarFree rtos seminar
Free rtos seminarCho Daniel
 
[오픈소스컨설팅]About RHEL7 systemd
[오픈소스컨설팅]About RHEL7 systemd[오픈소스컨설팅]About RHEL7 systemd
[오픈소스컨설팅]About RHEL7 systemdJi-Woong Choi
 
Ch7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and APICh7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and APIHongmin Park
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part Isprdd
 
프로세스
프로세스프로세스
프로세스xxbdxx
 
(참고) Elk stack 설치 및 kafka
(참고) Elk stack 설치 및 kafka(참고) Elk stack 설치 및 kafka
(참고) Elk stack 설치 및 kafkaNoahKIM36
 
하둡 고가용성(HA) 설정
하둡 고가용성(HA) 설정하둡 고가용성(HA) 설정
하둡 고가용성(HA) 설정NoahKIM36
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8HyeonSeok Choi
 
20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제Tae Young Lee
 
Zookeeper 활용 nifi clustering
Zookeeper 활용 nifi clusteringZookeeper 활용 nifi clustering
Zookeeper 활용 nifi clusteringNoahKIM36
 

What's hot (20)

도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace
 
Ryu with OpenFlow 1.3, Traffic Monitor
Ryu with OpenFlow 1.3, Traffic MonitorRyu with OpenFlow 1.3, Traffic Monitor
Ryu with OpenFlow 1.3, Traffic Monitor
 
Introduction to Linux #1
Introduction to Linux #1Introduction to Linux #1
Introduction to Linux #1
 
[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7
 
ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
 
도커 없이 컨테이너 만들기 3편
도커 없이 컨테이너 만들기 3편도커 없이 컨테이너 만들기 3편
도커 없이 컨테이너 만들기 3편
 
하둡관리
하둡관리하둡관리
하둡관리
 
Free rtos seminar
Free rtos seminarFree rtos seminar
Free rtos seminar
 
[오픈소스컨설팅]About RHEL7 systemd
[오픈소스컨설팅]About RHEL7 systemd[오픈소스컨설팅]About RHEL7 systemd
[오픈소스컨설팅]About RHEL7 systemd
 
Ch7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and APICh7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and API
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part I
 
프로세스
프로세스프로세스
프로세스
 
(참고) Elk stack 설치 및 kafka
(참고) Elk stack 설치 및 kafka(참고) Elk stack 설치 및 kafka
(참고) Elk stack 설치 및 kafka
 
하둡 고가용성(HA) 설정
하둡 고가용성(HA) 설정하둡 고가용성(HA) 설정
하둡 고가용성(HA) 설정
 
1.intro to k8s
1.intro to k8s1.intro to k8s
1.intro to k8s
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8
 
20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제
 
Zookeeper 활용 nifi clustering
Zookeeper 활용 nifi clusteringZookeeper 활용 nifi clustering
Zookeeper 활용 nifi clustering
 

Viewers also liked

Pgcon2012 ori-20120224
Pgcon2012 ori-20120224Pgcon2012 ori-20120224
Pgcon2012 ori-20120224Manabu Ori
 
Ryu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIRyu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIjieun kim
 
Introduction to Software Defined Networking and OpenStack Neutron
Introduction to Software Defined Networking and OpenStack NeutronIntroduction to Software Defined Networking and OpenStack Neutron
Introduction to Software Defined Networking and OpenStack NeutronSana Khan
 
Openstack Neutron and SDN
Openstack Neutron and SDNOpenstack Neutron and SDN
Openstack Neutron and SDNinakipascual
 
Debugging Ruby
Debugging RubyDebugging Ruby
Debugging RubyAman Gupta
 
Rubinius @ RubyAndRails2010
Rubinius @ RubyAndRails2010Rubinius @ RubyAndRails2010
Rubinius @ RubyAndRails2010Dirkjan Bussink
 
Debugging Ruby Systems
Debugging Ruby SystemsDebugging Ruby Systems
Debugging Ruby SystemsEngine Yard
 
Debugging Ruby (Aman Gupta)
Debugging Ruby (Aman Gupta)Debugging Ruby (Aman Gupta)
Debugging Ruby (Aman Gupta)MongoSF
 
OpenSource Hardware -Debian Way
OpenSource Hardware -Debian WayOpenSource Hardware -Debian Way
OpenSource Hardware -Debian WaySiji Sunny
 
Operating OPNFV
Operating OPNFVOperating OPNFV
Operating OPNFVOPNFV
 
OpenStack@Mini-Deb Conf'16 Mumbai
OpenStack@Mini-Deb Conf'16 MumbaiOpenStack@Mini-Deb Conf'16 Mumbai
OpenStack@Mini-Deb Conf'16 MumbaiAkanksha Agrawal
 
Copr HD OpenStack Day India
Copr HD OpenStack Day IndiaCopr HD OpenStack Day India
Copr HD OpenStack Day Indiaopenstackindia
 
Your first patch to OpenStack
Your first patch to OpenStackYour first patch to OpenStack
Your first patch to OpenStackopenstackindia
 
Deploying openstack using ansible
Deploying openstack using ansibleDeploying openstack using ansible
Deploying openstack using ansibleopenstackindia
 
The OpenStack Contribution Workflow
The OpenStack Contribution WorkflowThe OpenStack Contribution Workflow
The OpenStack Contribution Workflowopenstackindia
 
Your first patch to open stack
Your first patch to open stackYour first patch to open stack
Your first patch to open stackAkanksha Agrawal
 
Guts & OpenStack migration
Guts & OpenStack migrationGuts & OpenStack migration
Guts & OpenStack migrationopenstackindia
 
OpenStack Storage Buddy Ceph
OpenStack Storage Buddy CephOpenStack Storage Buddy Ceph
OpenStack Storage Buddy Cephopenstackindia
 
Introduction to tempest
Introduction to tempest Introduction to tempest
Introduction to tempest openstackindia
 

Viewers also liked (20)

Pgcon2012 ori-20120224
Pgcon2012 ori-20120224Pgcon2012 ori-20120224
Pgcon2012 ori-20120224
 
Ryu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIRyu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST API
 
Introduction to Software Defined Networking and OpenStack Neutron
Introduction to Software Defined Networking and OpenStack NeutronIntroduction to Software Defined Networking and OpenStack Neutron
Introduction to Software Defined Networking and OpenStack Neutron
 
Openstack Neutron and SDN
Openstack Neutron and SDNOpenstack Neutron and SDN
Openstack Neutron and SDN
 
Debugging Ruby
Debugging RubyDebugging Ruby
Debugging Ruby
 
Rubinius @ RubyAndRails2010
Rubinius @ RubyAndRails2010Rubinius @ RubyAndRails2010
Rubinius @ RubyAndRails2010
 
Debugging Ruby Systems
Debugging Ruby SystemsDebugging Ruby Systems
Debugging Ruby Systems
 
Debugging Ruby (Aman Gupta)
Debugging Ruby (Aman Gupta)Debugging Ruby (Aman Gupta)
Debugging Ruby (Aman Gupta)
 
OpenSource Hardware -Debian Way
OpenSource Hardware -Debian WayOpenSource Hardware -Debian Way
OpenSource Hardware -Debian Way
 
Operating OPNFV
Operating OPNFVOperating OPNFV
Operating OPNFV
 
OpenStack@Mini-Deb Conf'16 Mumbai
OpenStack@Mini-Deb Conf'16 MumbaiOpenStack@Mini-Deb Conf'16 Mumbai
OpenStack@Mini-Deb Conf'16 Mumbai
 
Copr HD OpenStack Day India
Copr HD OpenStack Day IndiaCopr HD OpenStack Day India
Copr HD OpenStack Day India
 
Your first patch to OpenStack
Your first patch to OpenStackYour first patch to OpenStack
Your first patch to OpenStack
 
Deploying openstack using ansible
Deploying openstack using ansibleDeploying openstack using ansible
Deploying openstack using ansible
 
The OpenStack Contribution Workflow
The OpenStack Contribution WorkflowThe OpenStack Contribution Workflow
The OpenStack Contribution Workflow
 
Your first patch to open stack
Your first patch to open stackYour first patch to open stack
Your first patch to open stack
 
Open stack qa and tempest
Open stack qa and tempestOpen stack qa and tempest
Open stack qa and tempest
 
Guts & OpenStack migration
Guts & OpenStack migrationGuts & OpenStack migration
Guts & OpenStack migration
 
OpenStack Storage Buddy Ceph
OpenStack Storage Buddy CephOpenStack Storage Buddy Ceph
OpenStack Storage Buddy Ceph
 
Introduction to tempest
Introduction to tempest Introduction to tempest
Introduction to tempest
 

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

20150509 unix v6로 배우는 커널의 원리와 구조 4 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 4 김지은20150509 unix v6로 배우는 커널의 원리와 구조 4 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 4 김지은jieun kim
 
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장Sunggon Song
 
Linux programming study
Linux programming studyLinux programming study
Linux programming studyYunseok Lee
 
스레드
스레드스레드
스레드xxbdxx
 
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfOS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfHo Jeong Im
 
(120128) #fitalk sql server anti-forensics
(120128) #fitalk   sql server anti-forensics(120128) #fitalk   sql server anti-forensics
(120128) #fitalk sql server anti-forensicsINSIGHT FORENSIC
 
Process (프로세스의 개념, 특징, 정의)
Process (프로세스의 개념, 특징, 정의)Process (프로세스의 개념, 특징, 정의)
Process (프로세스의 개념, 특징, 정의)ssuserd5354e
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇Seungyong Lee
 
[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스종빈 오
 
2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file formatYoungjun Chang
 
Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본ssuser0c2478
 
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)Ubuntu Korea Community
 
2006 03 15_pe & api hook
2006 03 15_pe & api hook2006 03 15_pe & api hook
2006 03 15_pe & api hook용환 노
 
Windows reversing study_basic_3
Windows reversing study_basic_3Windows reversing study_basic_3
Windows reversing study_basic_3Jinkyoung Kim
 
운영체제 Sig2
운영체제 Sig2운영체제 Sig2
운영체제 Sig2YoungGun Na
 
Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석Sung wook Kang
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅NAVER D2
 
IoT with Raspberry Pi + Node JS - Chapter 1
IoT with Raspberry Pi + Node JS - Chapter 1IoT with Raspberry Pi + Node JS - Chapter 1
IoT with Raspberry Pi + Node JS - Chapter 1Park Jonggun
 

Similar to 20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은 (20)

20150509 unix v6로 배우는 커널의 원리와 구조 4 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 4 김지은20150509 unix v6로 배우는 커널의 원리와 구조 4 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 4 김지은
 
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
 
Linux programming study
Linux programming studyLinux programming study
Linux programming study
 
스레드
스레드스레드
스레드
 
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfOS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
 
(120128) #fitalk sql server anti-forensics
(120128) #fitalk   sql server anti-forensics(120128) #fitalk   sql server anti-forensics
(120128) #fitalk sql server anti-forensics
 
Process (프로세스의 개념, 특징, 정의)
Process (프로세스의 개념, 특징, 정의)Process (프로세스의 개념, 특징, 정의)
Process (프로세스의 개념, 특징, 정의)
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스
 
2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file format
 
Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본
 
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
 
2006 03 15_pe & api hook
2006 03 15_pe & api hook2006 03 15_pe & api hook
2006 03 15_pe & api hook
 
Lightning Talk 10
Lightning Talk 10Lightning Talk 10
Lightning Talk 10
 
Windows reversing study_basic_3
Windows reversing study_basic_3Windows reversing study_basic_3
Windows reversing study_basic_3
 
shell and process
shell and processshell and process
shell and process
 
운영체제 Sig2
운영체제 Sig2운영체제 Sig2
운영체제 Sig2
 
Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
IoT with Raspberry Pi + Node JS - Chapter 1
IoT with Raspberry Pi + Node JS - Chapter 1IoT with Raspberry Pi + Node JS - Chapter 1
IoT with Raspberry Pi + Node JS - Chapter 1
 

More from jieun kim

KrDAG 오픈소스를 활용하여 웹블로그 만들기_김지은_201603
KrDAG 오픈소스를 활용하여 웹블로그 만들기_김지은_201603 KrDAG 오픈소스를 활용하여 웹블로그 만들기_김지은_201603
KrDAG 오픈소스를 활용하여 웹블로그 만들기_김지은_201603 jieun kim
 
OpenStack Korea 2015 상반기스터디(devops) 스크립트로 오픈스택 설치하기 20150728
OpenStack Korea 2015 상반기스터디(devops) 스크립트로 오픈스택 설치하기 20150728OpenStack Korea 2015 상반기스터디(devops) 스크립트로 오픈스택 설치하기 20150728
OpenStack Korea 2015 상반기스터디(devops) 스크립트로 오픈스택 설치하기 20150728jieun kim
 
150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은jieun kim
 
150326 openstack, glance 김지은
150326 openstack, glance 김지은150326 openstack, glance 김지은
150326 openstack, glance 김지은jieun kim
 
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은jieun kim
 
집단지성프로그래밍 05. 최적화(kayak.ipynb) 김지은_20150522
집단지성프로그래밍 05. 최적화(kayak.ipynb) 김지은_20150522집단지성프로그래밍 05. 최적화(kayak.ipynb) 김지은_20150522
집단지성프로그래밍 05. 최적화(kayak.ipynb) 김지은_20150522jieun kim
 
집단지성프로그래밍 05. 최적화(optimization.ipynb) 김지은_20150522
집단지성프로그래밍 05. 최적화(optimization.ipynb) 김지은_20150522집단지성프로그래밍 05. 최적화(optimization.ipynb) 김지은_20150522
집단지성프로그래밍 05. 최적화(optimization.ipynb) 김지은_20150522jieun kim
 
집단지성프로그래밍 05. 최적화(optimization) 김지은_20150522
집단지성프로그래밍 05. 최적화(optimization) 김지은_20150522집단지성프로그래밍 05. 최적화(optimization) 김지은_20150522
집단지성프로그래밍 05. 최적화(optimization) 김지은_20150522jieun kim
 
Build the OpenStack Cloud with Neutron Networing, IceHouse
Build the OpenStack Cloud with Neutron Networing, IceHouseBuild the OpenStack Cloud with Neutron Networing, IceHouse
Build the OpenStack Cloud with Neutron Networing, IceHousejieun kim
 
150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kim150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kimjieun kim
 
resource on openstack
 resource on openstack resource on openstack
resource on openstackjieun kim
 

More from jieun kim (11)

KrDAG 오픈소스를 활용하여 웹블로그 만들기_김지은_201603
KrDAG 오픈소스를 활용하여 웹블로그 만들기_김지은_201603 KrDAG 오픈소스를 활용하여 웹블로그 만들기_김지은_201603
KrDAG 오픈소스를 활용하여 웹블로그 만들기_김지은_201603
 
OpenStack Korea 2015 상반기스터디(devops) 스크립트로 오픈스택 설치하기 20150728
OpenStack Korea 2015 상반기스터디(devops) 스크립트로 오픈스택 설치하기 20150728OpenStack Korea 2015 상반기스터디(devops) 스크립트로 오픈스택 설치하기 20150728
OpenStack Korea 2015 상반기스터디(devops) 스크립트로 오픈스택 설치하기 20150728
 
150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은
 
150326 openstack, glance 김지은
150326 openstack, glance 김지은150326 openstack, glance 김지은
150326 openstack, glance 김지은
 
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
 
집단지성프로그래밍 05. 최적화(kayak.ipynb) 김지은_20150522
집단지성프로그래밍 05. 최적화(kayak.ipynb) 김지은_20150522집단지성프로그래밍 05. 최적화(kayak.ipynb) 김지은_20150522
집단지성프로그래밍 05. 최적화(kayak.ipynb) 김지은_20150522
 
집단지성프로그래밍 05. 최적화(optimization.ipynb) 김지은_20150522
집단지성프로그래밍 05. 최적화(optimization.ipynb) 김지은_20150522집단지성프로그래밍 05. 최적화(optimization.ipynb) 김지은_20150522
집단지성프로그래밍 05. 최적화(optimization.ipynb) 김지은_20150522
 
집단지성프로그래밍 05. 최적화(optimization) 김지은_20150522
집단지성프로그래밍 05. 최적화(optimization) 김지은_20150522집단지성프로그래밍 05. 최적화(optimization) 김지은_20150522
집단지성프로그래밍 05. 최적화(optimization) 김지은_20150522
 
Build the OpenStack Cloud with Neutron Networing, IceHouse
Build the OpenStack Cloud with Neutron Networing, IceHouseBuild the OpenStack Cloud with Neutron Networing, IceHouse
Build the OpenStack Cloud with Neutron Networing, IceHouse
 
150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kim150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kim
 
resource on openstack
 resource on openstack resource on openstack
resource on openstack
 

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

  • 1. [UNIX V6로 배우는 커널의 원리와 구조] 기본 구조체 정리 김지은 yeswldms@gmail.com
  • 2. 기본 구조체 • 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, 명령을 실행한 결과 캐리가 발생했을 때 설정
  • 3. 기본 구조체 • 범용레지스터 Bit 의미 r0., r1 계산용, 함수의 리턴값 r2, r3, r4 로컬 처리 r5 프레임포인터, 환경 포인터, 각 프로세스가 가진 스택의 처음 위치 r6(sp) 스택 포인터 r7(pc) 프로그램 카운터
  • 4. 기본 구조체 • 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이면, 값이 갱신되어 원래 값을 읽어버림
  • 5. 기본 구조체 • 프로세스 상태 정보 및 제어 정보 - 한 쌍의 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 사용중인 텍스트 세그먼트
  • 6. 기본 구조체 • 프로세스 상태 정보 및 제어 정보 프로세스 상태, 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 트레이스 처리에 사용
  • 7. 기본 구조체 • 프로세스 상태 정보 및 제어 정보 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은 파일이나 디렉토리를 나타냄
  • 8. 기본 구조체 • 프로세스 상태 정보 및 제어 정보 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[] 시스텐 콜 처리 중에 시그널 처리가 발생 했는지 판단하는 플래그
  • 9. 기본 구조체 • 프로세스 상태 정보 및 제어 정보 에러코드, 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 시스템 콜 등으로 이미 그 파일이 있을 때
  • 10. 기본 구조체 • 프로세스 상태 정보 및 제어 정보 에러코드, u_error Bit 의미 EXDEV 디바이스 파일에 대하여 링크를 걸려고 함 ENODEV 디바이스 번호로 가리키는 디바이스가 존재하지 않음 ENOTDIR 디렉토리가 아님 EISDIR 디렉터리에 쓰려고 함 EINVAL 매개변수가 맞지 않음 ENFILE File[]이 넘침 EMFILE user.u_ofile[]이 넘침 ENOTTY 터미널의 스페셜 파일이 아님 ETXTBSY 텍스트 세그먼트를 할당받을 프로그램의 파일이 다른 프로세스의 데이터 파일로 사용됨, 또는 텍스트 세그먼트로 할당받 은 파일에 쓰려고함 EFBIG 파일 크기가 큼 ENOSPC 블록 디바이스 용량이 부족함 ESPIPE 파이프 파일에 대하여 seek시스템 콜을 실행 EROFS 읽기 전용으로 마운트 된 블록 디바이스의 파일이나 디렉토리를 갱신 EMLINK 링크 수가 너무 많음 EPIPE 파이프 파일이 망가짐
  • 11. 기본 구조체 • 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: 쓰기 가능