SlideShare ist ein Scribd-Unternehmen logo
1 von 36
[UNIX V6로 배우는 커널의 원리와 구조]
chapter1. UNIX V6 / chapter2. 프로세스
김지은
yeswldms@gmail.com
교재
UNIX V6 :
UNIX V6로 배우는 커널의 원리와 구조
아오야기 타카히로 지음
조만석 옮김(IAMROOT OB님^^)
한빛소프트
지은이의 말
• 1975년에 벨 연구소에서 배포한 Sixth Edition Unix(이하 UNIX V6)의 커널 해석
• 커널소스 읽기
커널(Kernel) – OS의 핵심, 컴퓨터 시스템을 사용하는 데 /꼭 필요한 기능을 제공
쉘프로그램(shell program) – 커널의 기능을 이용해서 만들어진 SW
OS는 프로그램을 “커널프로그램”, “사용자프로그램”으로 구분
- 컴퓨터 시스템을 큰 그림으로 이해
- 컴퓨터가 더 재밌어짐
- 컴퓨터 시스템을 구성하는 기능에 대해 더 깊게 이해할 수 있음
- 한 단계 높은 기술자로 성장할 수 있음
• 왜 UNIX V6가 교재로 좋은가?
- 약 10,000의 코드(리눅스 최신 버전의 커널소스는 약 1,000줄)
- 충실한 자료, Lions’ Commentary on UNIX V6 Edition with Source Code(PDP-11/40용 어셈블러 사양과 어셈플러
코드에 대한 해설도 담고있어서 함께보는 걸 권장)
- PDP-11이나 주변장치 기술 사양도 검색이 쉽게 됨
- OS의 기본 아이디어 뿌리, 기초를 다지는데 적합함
- 복잡하지 않은 기능 구현
- 전체 시스템의 그림을 이해
- 에뮬레이터, 여러 프로세서를 에뮬레이션하는 simh소프트웨어를 사용해 PDP-11시리즈 기반에서 UNIX V6fmf 동
작해볼 수 있음
- 몇가지 문제점,…….. Pre K&R
지은이의 말
• 책의 구성
#2~4장 프로그램을 실행하고 관리하는 프로세스
2 프로세스 구조
3 프로세스 관리방법
4 스와핑처리
# 5,6장 인터럽트 처리
5 주변장치나 CPU내부에서 발생한
인터럽트처리 와 시스템 콜
6 프로세스 중단 및 변경시키는 시그널
# 7,8장 디스크 I/O처리
7 블록디바이스
8 블록 디바이스 드라이버
# 9,10장 파일시스템
9 파일시스템의 구성요소
10 파일시스템을 다루는 방법
# 11장 프로세스 간 데이터 통신인 파이프
# 12장 라인프린터같은 문자 입출력
# 13장 터미널
# 14장 시스템 초가 부팅 과정
◀ Kernel의
전체구조ㅊ
Kernel
사용자프로그램
파일 시스템
블록데바이스
문자디브바이스
서브시스템
주변 장치 터미널
CPU
메모리
디바이스 드라이버
프로세스 제어
process
버퍼
5장. 시스템 콜
5장.인터럽트
process
process
6장 시그널
2,3,4장
9,10,11장
7,8,12장 13장
지은이의 말
• 기술방식
기본 동작을 설명하는 것을 가장 우선적인 목표
• 소스코드 설명
구조체, 함수, 스택, 레지스터, 숫자의 표기
진법 변환
• 소스코드 분석 방법
커널 명세서, 사용자 프로그램 매뉴얼
구조체
어드레스 공간, 커널어드레스 공간/사용자어드레스 공간
Part 1. UNIX V6란?
Chapter 1. UNIX V6의 전체 큰 그림
1.1 UNIX V6란?
- Kenneth Lane Thompson과 Dennis Mac Alistair Richie가 개발
- 1975년 벨 연구소에서 발표
- 특징
1) 대부분이 C언어로 작성
2) 저작권을 허가된 사람들에게 공개함으로써, 대학등에서 각 환경에 맞게 이식되며 널리 퍼짐
3) 자신만의 독창적인 추가기능이 필요하면 소스코드를 고쳐서 사용하는 일도 많았음
이 책은, DES사의 DPD11/40이라는 프로세서에서 동작하는 커널을 다룸
1.2 UNIX 역사
- 벨 연구소에서 UNIX V6를 발표
- 1979년 Seventh Edition Unix(UNIX V7) 배포
- 1978년 버클리 대학에서 UNIX V6로 BSD 발표
- 파편화의 문제
: 표준화 규칙 POSIX라는 OS공통 API 규격발표
Chapter 1. UNIX V6의 전체 큰 그림
1.3 UNIX V6 커널
# 시스템 자원의 사용
> 시스템자원의 사용을 위한 기능
- 프로세스 관리
- 메모리 관리
- 파일 시스템
- 파일과 주변 디바이스를 위한 공통 I/O
- 인터럽트
- 터미널 지원
> 시스템의 메모리, CPU, DISK 등은 커널이나 드라이버는 추상화되어 사용자는 시스템을 편안히 사용할 수 있음
> 시스템 콜(system call)을 사용하여 시스템 자원을 사용
> 시스템에 영향을 주는 처리를 커널에서 관리, 안정성과 보안성 유지
어플리케이션 프로그램
Kernel
라이브러리,
시스템 프로그램 등
시스템 콜
라이브러리 함수 호출,
커맨드 실행 등
▲ UNIX V6를 구성하는 소프트웨어
사용자 애플리케이션 프로그램도
직접 시스템콜 호출도 가능
Chapter 1. UNIX V6의 전체 큰 그림
1.4 UNIX V6의 하드웨어
1.4.1 PDP-11 하드웨어
PDP-11 시리즈, Digital Equipment Corporation (DES) 사에서 제작한 프로세서
본 교재는 PDP-11/40을 대상으로 함
◀ PDP-11/40
Chapter 1. UNIX V6의 전체 큰 그림
- 16bit 장비, 명령어와 데이터를 기본 16bit 단위로 처리
 PDP-11/40의 1워드는 16bit (word는 프로세서가 처리리하는 데이터 단위)
- 전용 I/O버스가 아닌 Unibus로 입/출력 (Unibus는 18bit 어드레스 사용)
- PDP-11/40의 레지스터와 주변장치의 레지스터는 메모리의 최상위 8KByte에 위치
- 메모리를 읽고 쓰듯이 각 레지스터를 읽고 씀, “메모리 맵 입출력(Memory Mapped I/O)”
- MMIO(Memory Mapped I/O)방식이란?
: 메모리중 일부분이 I/O장치에 할당되어, 그 주소로 읽고쓰는 것이 그 입출력 장치로의 명령으로 해석되는 방식
- UNIX V6은 왜 Unibus를 썼을까?
: 그 당시 UNIX V6의 버스에 붙은 장치들이 총 4개였나? 그래서 2bit으로 표현이 가능해서.. 16bit + 2bit(주변장치
위치참조부분) = 18bit으로 주소를 참조하는 건가?
PDP-11 Memory DISK Terminal
unibus
•DISK레지스터는 최상위 8KByte의 어드레스에 위치,
MMIO(Memory Mapped I/O)방식으로 주변 장치를 조작 I/O 용
메모리
8KByte
0 어드레스
Chapter 1. UNIX V6의 전체 큰 그림
1.4.2 PSW
- Process Status Word, 프로세서 상태 워드
- 16bit 레지스터
bit 의미
15-14 현재모드(00:커널, 11:사용자)
13-12 이전모드(00:커널, 11:사용자)
7-5 프로세서 우선순위(7~0)
4 트랩 비트(trap bit)
3 N. (negative), 명령을 실행한 결과가 음수가 되었을 때 성립됨
2 Z. (zero), 명령을 실행한 결과
1 V. (overflow), 명령을 실행한 결과 오버플로우가 발생했을 때 설정
0 C. (Carry), 명령을 실행한 결과 캐리가 발생했을때 설정
•Trap bit : 스트립트 또는 쉘이 인터럽트를 가로채서 스크립트내에서 어떤 작업을 할 수 있도록 하는 기능을 제공
일반적으로 ctrl+c 등의 작업이 일어나면 시스템 관점에서는 적절한 시그널을 발생하여 처리하게 되어있다. 하지만 이러한 시그널은 어
느 시점이 발생하였는지 정확히 알 수 없어 예상치 못한 결과나 에러를 발생한다. 이때 Trap을 사용하여 미리 정의된 작업을 할 수 있
도록 한다….. 어떻게?
* Carry vs OverFlow ??
Chapter 1. UNIX V6의 전체 큰 그림
1.4.3 범용레지스터
- 8개의 범용 레지스터, r0 ~ r7
- r6레지스터(SP)는 사용자모드, 커널모드로 구분
- PSW 레지스터의 현재모드(15-14)값이 변하면 r6(SP)도 하드웨어에 의해 자동으로 보드가 바뀜
1.4.4 MMU
- Memory Management Unit
- 어드레스 변환과 접근 권한을 관리
- PDP-11/40은 메모리를 8KByte의 세그먼트나 페이지 단위로 관리
- 권한없는 메모리 영역에 접근하면 MMU에서 트랩 발생
- MMU는 APR레지스터를 사용해 각 세그먼트 설정 및 가상 어드레스를 물리어드레스로 변환
- MMU에는 SR0, SR2라는 2개의 상태 레지스터가 있음
- ….
Bit 의미
r0, r1 계산용, 함수의 리턴값
r2, r3, r4 로컬처리
r5 프레임포인터, 환경포인터
r6(SP) 스택포인터
r7(pc) 프로그램 카운터
Chapter 1. UNIX V6의 전체 큰 그림
1.4.4 MMU
- …
- MMU에는 SR0, SR2라는 2개의 상태 레지스터가 있음
SR0, 메모리 관리 유효화 플래그와 에러정보에 사용, 에러발생에도 사용(SR0[15~13])
SR2 , 실행할 명령어의16비트 가상 어드레스
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이면, 값이 갱신되어 원래 값을 잃어버리게 됨
Chapter 1. UNIX V6의 전체 큰 그림
1.4.5 메모리
- PDP-11/40은 자기코어 메모리를 사용
- 8bit(1byte) 단위로 어드레스를 붙임.
- 메모리는 18bit의 어드레스 단위를 가짐
- 용량은 2^18 = 256KByte
- 상위 8KByte는 주변 장치를 위한 레지스터 매핑에 사용
- 프로세서는 메모리에 저장된 명령어와 데이터를 처리
1.4.6 블록 디바이스
- 대량의 데이터를 다루는 장치
- 일부를 swap영역으로 사용
- 스와핑 : 한정된 메모리 용량을 많은 프로그램이 사용하기 위해 커널이 데이터를 메모리에서 스와프 영역으로 밀어
놓거나, 데이터를 스와프 영역에서 메모리를 복구
1.4.7 라인 프린터
- 종이에 문자를 출력하는 장치
1.4.8 터미널
- 시스템과 사용자를 연결하는 장치. 대화형
Chapter 1. UNIX V6의 전체 큰 그림
1.5 소스코드
- UNIX V6는 현재 BSD 라이선스
- 인터넷에서 구할 수 있음
1.6 매뉴얼
- UNIX V6는 UNIX Programmer’s Manual(UPM)이라는 사용자 매뉴얼이 있음
- 9개의 장으로 구성
- 커널의 이해에는 2장, 4장이 중요
- 실행 프로그램의 파일(a.out) 포맷을 알기위해 5장도 중요
- 사용자 영역의 시스템 프로그램을 한다면 1,3,5,8장이 중요
Chapter 2. 프로세스
2.1 프로세스의 요소
2.1.1 프로세스란?
- 어떤 프로그램이 실행되면 커널이 실행한 프로그램을 프로세스라고 함
- 커널이 관리
1) 프로그램 실행
2) 파일시스템에 파일형태로 메모리로 로드
3) 물리메모리  가상메모리공간에서 실행
4) MMU에서 가상어드레스가 물리어드레스로 변환
# 프로세스 ID
- 고유의 프로세스 ID를 가짐
- 각 프로세스는 독립적인 가상어드레스 공간을 할당받음
Chapter 2. 프로세스
2.1.2 프로세스 병렬처리
: UNIX V6는 멀티유저 모드를 지원
# TSS, Time Sharing System
- 물리CPU는 1개.. 즉, 여러개의 프로세스를 실행하는 실제 프로세스는 단 하나
 다른 여러 프로세스는 대기
- 물리 CPU는 한 개의 프로세스만 실행
- 짧은 시간단위로 실행할 프로세스를 바꾸어 처리하여, 여러개의 프로그램이 동시에 처리되는 것처럼 보이게 함
시간
프로세스 1 프로세스 2 프로세스 3
실행 프로세스
Chapter 2. 프로세스
2.1.3 프로세스 상태
- 커널은 실행 가능한 상태에 있는 프로세스 중 한 개를 실행 프로세스로 선택
2.1.4 사용자 모드와 커널 모드
# 프로세서 모드
- 모드가 바뀌면, MMU에서 가상 어드레스에 대응하는 메모리 공간도 바꿈
- PSW(Process Status Word)를 사용하여 바꿈
상태 의미
실행가능상태 실행 프로세스와 실행 가능한 상태로 대기하는 프로세스
슬립상태 - CPU자원이 해제되기 전까지 기다림
- 주변 장치에서 처리가 끝나기를 기다림
- 처리를 계속 진행하지 않는 프로세스
모드 가상 어드레스 공간, 프로세스
사용자모드 사용자 공간, 사용자 프로세스
커널모드 커널 공간, 커널 프로세스
Chapter 2. 프로세스
# 시스템 콜
- 커널 기능을 사용하기 위해선 시스템 콜을 호출하여 원하는 커널 기능을 실행 할 것을 요청
- 시스템 콜 호출 시, 커널모드로 전환
- 커널 처리 종료 후, 사용자 모드로 전환
- 사용자 공간  커널 공간
: fubyte(), fuibyte(), fuword(), fuiword(), subyte(), suibyte(), suword(), suiword() 함수 사용
(u :user, s :store, f: fatch, i :interupt)
# 커널 모드
- 시스템 자원을 직접관리
- 커널 기능을 사용하려면 커널에 정식 수단으로 요청해야함
사용자 모드 커널 모드
커널 기능 사용요구
커널 모드로 바뀜
사용자 모드로 되돌아감
Chapter 2. 프로세스
2.1.5 스와핑
- 스와핑은 시스템이 부팅할 때 생성된 프로세스가 처리
2.2 Proc 구조체와 User 구조체
- 각 프로세스 상태정보와 제어정보를 한 쌍의 Proc 구조체와 User 구조체로 관리
- 프로세스 당 각각 한 개씩 할당
- Proc 구조체 : 메모리에 항상 로드되어있음
- User 구조체 : 스와프 아웃 대상이 됨
종류 의미
Swap out 프로세스가 늘어나 메모리가 부족해지면,
커널은 슬립 상태에 있는 프로세스나 우선순위가 낮은 프로세스를 메모리에서 스와핑 역역으로
이동
Swap in 스와프아웃된 프로세스 중, 실행 상태로 된 프로세스를 다시 스와핑 역역에서 메모리오 이동
Chapter 2. 프로세스
2.2.1 Proc 구조체
- proc[]
- 각 엔트리는 한 개의 프로세스에 대응
- 프로세스에 관련된 정보 중, 프로세스 상태나 실행 우선순위등의 정보를 포함  커널에서 항상 필요한 정보(메모리
에 항상 상주)
- proc[]의 엔트리 수 : #define NOROC 50, 시스템은 proc[]의 엔트리 수보다 더 많은 프로세스를 가지지 못함
표, proc 구조체
- Proc[]는 배열로써 정적할당(50개의 엔트리)되어있고,
swap-out되면 p_stat의 상태를 바꾸고, 새로운 프로세스가 swap-in되면 새로 써줌
요소 의미
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 프로세스를 실행한 터미널
…
Chapter 2. 프로세스
표, 프로세스 상태
표, 플래그
상태 의미
SSLEEP 슬립, 실행 우선순위가 음수값으로 슬립상태
SWAIT 슬립, 실행 우선순위가 0이상으로 슬립상태
SRUN 실행가능 상태
SIDL 프로세스 생성 중
SZOMB 좀비 상태
SSTOP 트레이스 개입을 기다림
플래그 의미
SLOAD 메모리에 있음(스와프 아웃되지 않음)
SSYS 시스템 프로세스로, 스와프 대상이 아님. UNIX V6에서 procp[0]만 가능
SLOCK 스와프 아웃되는 것을 막음
SSWAP 스와프 아웃으로 user.u_rsav[]의 값이 부정됨
STRC 트레이스 중
SWTED 트레이스 처리에 사용
Chapter 2. 프로세스
2.2.2 user 구조체
- user[]
- 프로세스가 오픈한 파일이나 현재 디렉터리 정보등을 담고있음
- 실행 프로세스를 제외한 user 구조체에서는 커널에서 필요하지 않기 때문에,
프로세스가 스와프아웃되면 user 구조체도 함께 스와프 아웃
표, user 구조체
요소 의미
u_procp 이 user구조체에 대응된 proc[]엔트리를 가리킴
u_base 파일을 읽고 쓸 때 매개변수를 넘겨 줄 때 사용
u_count 파일을 읽고 쓸 때 매개변수를 넘겨 줄 때 사용
u_offset[] 파일을 읽고 쓸 때 매개변수를 넘겨 줄 때 사용
u_cdir 현재 디렉터리의 inode[] 엔트리
u_dirp 사용자 프로그램, 혹은 커널 프로그램에서 가리키는 파일의 경로를 읽을 때 사용
u_pdir namei()에 대상되는 파일, 데렉터리의 부모 디렉터리를 저장
u_ar0 시스템 콜 처리시 사용자 프로세스의 범용레지스터나 PSW 조작을 할 때 사용
…
Chapter 2. 프로세스
2.2.2 user 구조체
표, 에러코드 (u_error)
# 전역변수 u
- 커널은 전역변수 u를 사용하여 실행 프로세스의 user 구조체에 접근
- u를 사용해서 접근해야 하는 이유? (더 뒤에서 설명…)
u(conf/m40.s)
1 .globl _u
2 _u = 0140000
요소 의미
EFAULT 사용자 공간과 커널 공산 사이에 데이터 전송이 실패했을 때 등
EPERM 슈퍼 유저가 아님
ENOENT 지정돈 파일이 없음
ESRCH 시그널을 받는 프로세스가 없거나 이미 사라짐
EINTR 시스템 콜 처리 중에 시그널 처리를 했음
EIO I/O 에러
…
Chapter 2. 프로세스
2.3 프로세스의 메모리 할당
- 하나의 프로세스는 텍스트 세그먼트와 데이터 세그먼트라는 연속된 두 개의 물리 메모리 영역을 할당
- 물리 메모리 공간은 프로세스의 가상 어드레스로 변환
2.3.1 텍스트 세그먼트
- 프로그램의 실행코드
- 읽기전용
- 여러 프로세스가 공유 (하나의 프로그램을 동시에 여러개를 실행하는 경우)
- text[]로 관리, 텍스트 세그먼트의 크기는 uer.u_tsize
Chapter 2. 프로세스
2.3.2 데이터 세그먼트
- 프로그램이 사용하는 변수같은 데이터를 저장
- 여러 프로세스가 공유 할 수 없음, 공유된다면 다른 프로그램에 영향을 끼침
- 데이터 세그먼트의 물리 어드레스: proc.p_addr, 크기 : proc.p_size
- 데이터 세그먼트의 구조
요소 의미
PPDA Per Process Data Area
User구조체와 커널 스택영역으로 구성
크기 : USIZE x 64byte = 1KByte(사용자 공간에서는 사용할 수 없음)
커널스택영역 : 커널동작을 위한 작업영역으로 사용. 프로세스마다 커널모드용으로 작업영역을 설정
Data 영역 전역변수나 bss가은 정적 변수가 위치하는 영역과 프로세스가 동적 메모리 영역으로 관리하는 힙영역
으로 구성
힙 영역 확장 시 시스템 콜을 호출
힙 영역은 가상 어드레스의 작은 값에서 큰 값으로 확장
크기 : user.u_dsize
스택 영역 함수의 매개변수나 로컬 데이터등을 임시로 저장하는 영역
필요에따라 자동으로 확장
스택영역은 가상 어드레스의 최상위 어드레스에서 작은 값으로 확장
크기 : user.u_ssize
Chapter 2. 프로세스
# USIZE(param.h)
1 #define USIZE 16
그림. 데이터 세그먼트
user 구조체
커널 스택 영
역
데이터 영역
(힙)
PPDA
스택 영역
물리 메모리
USIZE
user_u.dsize
user_u.ssize
proc.p_size
proc.p_addr
Chapter 2. 프로세스
2.3.3 가상 어드레스 공간
프로세스는,
- 64KByte의 가상 어드레스 공간을 사용
- 16bit의 가상 어드레스 공간을 가짐
- 가상어드레스는 MMU에서 18bit 물리 어드레스로 바뀌어 물리 메모리에 접근
표, 가상 어드레스 공간과 물리 어드레스 공간
- 텍스트 세그먼트(process의 실행코드 저장)는 가상 어드레스 공간의 최하위 어드레스(0x0)를 할당받음
- 데이터 영역은 텍스트 세그먼트에서 8KByte 더한 어드레스를 할당
- 스택 영역은 최상위 어드레스 (0xffff)를 할당
공간 어드레스 용량
가상 어드레스 공
간
16비트 가상 어드레스 64 KByte
물리 어드레스 공
간
18비트 가상 어드레스 256 KByte
Chapter 2. 프로세스
2.3.3 가상 어드레스 공간
cf. 데이터영역이 고정사이즈인 이유.. 요즘은 작은 영역을 모아서 하나의 논리 메모리 영역으로 만들고, 다시 쪼개서 사
용할 수 있었지만 과거 UNIX V6에서는 해당 기술이 가능하지 않았다. 그냥 고정으로 할당받은 후 쪼개 쓰는 것까지만 가
능했다.
- 프로세스마다 독립된 가상 어드레스 공간을 사용
- 커널은 데이터영역과 스택영역으로 별도의 세그먼트로 나누어 APR을 설정(뒤에서 설명)
- 데이터영역: 데이터세그먼트, 스택영역: 스택세그먼트
# 가상메모리의 이점
- 프로그램을 임의의 어드레스부터 시작할 수 있음
- 메모리 접근을 관리할 수 있음
- 메모리 효율을 높일 수 있음
0xffff
가상 어드레스 공간
텍스트 세그먼
트
user_u.tsize
스택 영역
user_u.ssize
데이터 영역
user_u.dsize
0
“u” 변수가
시작부분을 가리킴
0 mod 8k
힙 확장영
역
스택 확장영
역
데이터 세그먼트
Chapter 2. 프로세스
2.3.3 가상 어드레스 공간
그림. 물리어드레스와 가상어드레스 공간
물리 어드레스 공간
텍스트 세그먼트
0x3fff
PPDA
데이터 영역
PPDA
데이터 영역
물리 어드레스
0
텍스트 세그먼트
데이터 영역
스택 영역
텍스트 세그먼트
데이터 영역
스택 영역
가상 어드레스
0
0xffff
프로세스 B의
가상 어드레스 공간
프로세스 A의
가상 어드레스 공간
가상 어드레스
0
0xffff
Chapter 2. 프로세스
2.3.4 어드레스 변환
- MMU : 가상 어드레스를 물리 어드레스로 변환
- MMU는 변환을 위해 두 개의 레지스터를 가짐(PAR, PDR)
- PAR(Page Address Register) + PDR(Page Description Register) = APR(Active Page Register)
- 각 사용자 프로세스마다 APR값을 user구조체에 저장, 프로세스가 실행되면 user 구조체를 가지고 사용자 APR값
을 설정
물리어드레
스
PAR PDR
APR
User 구조체
MMU가상어드레
스
그림. 어드레스
변환
bit 의미
11~0 베이스 어드레스(64byte 단위)
bit 의미
14~8 페이지 블록 수
6 데이터 비트, 갱신됨을 나타냄
3 비트가 1이면, 큰 어드레스에서 작은
어드레스 방향으로 할당
2~1 접근제어
00 : 할당하지 않는다.
01: 읽기전용
11 : 쓰기가능
표. PAR
표. PDR
Chapter 2. 프로세스
# PDP-11/40
- 2개의 APR을 가짐: 커널모드용, 사용자 모드용
- PSW의 현재 모드가 바뀌면 APR이 하드위어적으로 바뀌면서(물리적인 정보들이 갱신됨을 의미하는 것 같음),
MMU가 가상 어드레스 공간을 변환
- APR은 0부터 7까지 총 8쌍이 있음.
- 실행 프로세스에 커널이 사용자 프로세스용의 APR을 설정하면, 각 사용자 프로세스는 독립된 가상 어드레스 공간
을 확보
- 각 사용자 프로세스의 APR 값은 user 구조체에 저장
- 각각의 프로세스가 실행 프로세스가 되면, 사용자 프로세스용으로 APR 값이 설정됨
PSW
15 14 13 0
커널(00) 사용자(11)
APR1
APR0
APR2
…
APR7
APR1
APR0
APR2
…
APR7
그림. APR의 전환
Chapter 2. 프로세스
- APR은 0부터 7까지 8쌍
- 프로세스의 가상 어드레스 공간을 페이지, 혹은 세그먼트 단위로 관리
- 한쌍의 APR은 한 페이지에 대응
- PAR은 각 페이지가 가리키는 물리 어드레스의 베이스 어드레스 저장
- PDR은 각 페이지의 블록(64byte 단위)수나 접근 여부 등의 정보 저장
- 한 페이지에 최대 128블록(8KByte)을 할당
 페이지( or 세그먼트) : 프로세스의 가상 어드레스 공간
 1개의 프로세스는 총 8쌍의 APR을 가질 수 있음(커널영역8개, 사용자영역8개)
 PDR은 128개의 블록으로 쪼개어 관리 될 수 있다.
Q. 프로세스 하나당 한쌍의 APR을 가지면, 최대 8개의 프로세스만 메모리가상화기법을 사용하는 건가? 앞에서는 각 프
로세스마다 APR을 user 구조체에 넣는다고 했고, user구조체는 proc구조체에 매핑되고, 즉 최대 50개의 프로세스가 돌
아 갈 수 있는데… 무슨 말인지 잘 이해가 안감
Chapter 2. 프로세스
그림. 물리 어드레스 계산
u (0140000(8))
1100 0000 0000 0000(2)
- 가상 어드레스의 상위 3비트 [15~13]로 페이지(APR)가 선택되면,
- 선택된 APR의 PAR(11~0]비트는 물리 어드레스의 베이스 블록 어드레스(베이스 블록 No.)값이 결정
- 물리 어드레스의 베이스 블록 어드레스값과 가상어드레스의 [12~6]비트(가상 어드레스의 블록 No.)를 더해서 물리
메모리의 블록 어드레스(물리블록 No.) [17~6]비트를 구함
0
베이스 블록 No.
12 1115
블록No. 블록 내에 오프셋
15 13 12 6 5 0
PAR[0]~[7]
가상 어드레스
블록 내에 오프셋물리 블록 No.
17 6 5 0
물리 어드레스
ADD
: 110(2)6(10), 즉 PAR[6] : 00 0000: 0 0000 00
가상어드레스의 [12~6]
PAR[11~0]
: 물리 어드레스의 베이스
블록 어드레스 값
: 물리 메모리의
블록 어드레스[17~6]
물리메모리의 블록 어드레스
[17~6]비트와 가상어드레스 블록
내의 오프셋값[5~0]비트를 더하여
물리 어드레스 [17~0]비트를 구함
Chapter 2. 프로세스
그림. u에서 user 구조체 액세스
- 커널이 전역변수 u(0140000)을 사용하여 실행 프로세스의 user 구조체에 접근 가능
- 커널 모드용으로 실행 프로세스의 6번째 PAR을 데이터 세그먼트의 물리 어드레스(proc.p_addr)로 설정
- 커널 모드용 APR : 커널 APR
- 사용자 모드용 APR : 사용자 APR
- 0~n번째 까지의 APR : APRn
- 메모리 블록은 블록 디바이스의 블록(512byte)과 혼동되므로, 이 책에선 메모리 블록을 “64바이트 단위의 영역” 이
라 함
커널 APR
APR1
APR0
APR2
APR3
APR7
APR4
APR5
APR6
User 구조체
커널스택
물리메모리
실행 프로세스의
데이터 세그먼트
0x00000
0x3FFFF
물리 어드레스
proc.p_addr (각 프로세
스마다의 addr)
1100 0000 0000 0000
: u는 커널공간의
6페이지째 처음
을 가리킴
이상입니다.
작성일: 2015.05.05

Weitere ähnliche Inhalte

Was ist angesagt?

Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part I
sprdd
 
1주차 리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져
1주차   리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져1주차   리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져
1주차 리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져
Chulgyu Shin
 
07 스레드스케줄링,우선순위,그리고선호도
07 스레드스케줄링,우선순위,그리고선호도07 스레드스케줄링,우선순위,그리고선호도
07 스레드스케줄링,우선순위,그리고선호도
ssuser3fb17c
 
파일시스템 관련 명령어
파일시스템 관련 명령어파일시스템 관련 명령어
파일시스템 관련 명령어
Chulgyu Shin
 
A review of zookeeper 2010.12
A review of zookeeper 2010.12A review of zookeeper 2010.12
A review of zookeeper 2010.12
HoJin Ha
 

Was ist angesagt? (20)

Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part I
 
1주차 리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져
1주차   리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져1주차   리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져
1주차 리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱
 
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
 
[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7
 
07 스레드스케줄링,우선순위,그리고선호도
07 스레드스케줄링,우선순위,그리고선호도07 스레드스케줄링,우선순위,그리고선호도
07 스레드스케줄링,우선순위,그리고선호도
 
04 프로세스
04 프로세스04 프로세스
04 프로세스
 
2장 리눅스의 기초
2장 리눅스의 기초2장 리눅스의 기초
2장 리눅스의 기초
 
파일시스템 관련 명령어
파일시스템 관련 명령어파일시스템 관련 명령어
파일시스템 관련 명령어
 
[오픈소스컨설팅]About RHEL7 systemd
[오픈소스컨설팅]About RHEL7 systemd[오픈소스컨설팅]About RHEL7 systemd
[오픈소스컨설팅]About RHEL7 systemd
 
리눅스서버세팅-김태호
리눅스서버세팅-김태호리눅스서버세팅-김태호
리눅스서버세팅-김태호
 
우분투에 시스템콜 추가하기
우분투에 시스템콜 추가하기우분투에 시스템콜 추가하기
우분투에 시스템콜 추가하기
 
도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace
 
10 동기및비동기장치io
10 동기및비동기장치io10 동기및비동기장치io
10 동기및비동기장치io
 
Ch7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and APICh7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and API
 
A review of zookeeper 2010.12
A review of zookeeper 2010.12A review of zookeeper 2010.12
A review of zookeeper 2010.12
 
백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
3D카툰메이커 완료세미나(복구됨)
3D카툰메이커 완료세미나(복구됨)3D카툰메이커 완료세미나(복구됨)
3D카툰메이커 완료세미나(복구됨)
 
windows via c++ Ch 5. Job
windows via c++ Ch 5. Jobwindows via c++ Ch 5. Job
windows via c++ Ch 5. Job
 

Andere mochten auch

Kernel vm#9 powerkvm-dist-20131208
Kernel vm#9 powerkvm-dist-20131208Kernel vm#9 powerkvm-dist-20131208
Kernel vm#9 powerkvm-dist-20131208
Manabu Ori
 

Andere mochten auch (20)

리눅스 드라이버 실습 #1
리눅스 드라이버 실습 #1리눅스 드라이버 실습 #1
리눅스 드라이버 실습 #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_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
 
20150509 unix v6로 배우는 커널의 원리와 구조 4 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 4 김지은20150509 unix v6로 배우는 커널의 원리와 구조 4 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 4 김지은
 
OpenStack Tokyo Talk Application Data Protection Service
OpenStack Tokyo Talk Application Data Protection ServiceOpenStack Tokyo Talk Application Data Protection Service
OpenStack Tokyo Talk Application Data Protection Service
 
OpenStack Dragonflow shenzhen and Hangzhou meetups
OpenStack Dragonflow shenzhen and Hangzhou  meetupsOpenStack Dragonflow shenzhen and Hangzhou  meetups
OpenStack Dragonflow shenzhen and Hangzhou meetups
 
Dragon flow neutron lightning talk
Dragon flow neutron lightning talkDragon flow neutron lightning talk
Dragon flow neutron lightning talk
 
Dragonflow 01 2016 TLV meetup
Dragonflow 01 2016 TLV meetup  Dragonflow 01 2016 TLV meetup
Dragonflow 01 2016 TLV meetup
 
KrDAG 오픈소스를 활용하여 웹블로그 만들기_김지은_201603
KrDAG 오픈소스를 활용하여 웹블로그 만들기_김지은_201603 KrDAG 오픈소스를 활용하여 웹블로그 만들기_김지은_201603
KrDAG 오픈소스를 활용하여 웹블로그 만들기_김지은_201603
 
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
 
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
 
Dragonflow Austin Summit Talk
Dragonflow Austin Summit Talk Dragonflow Austin Summit Talk
Dragonflow Austin Summit Talk
 
집단지성프로그래밍 05. 최적화(optimization) 김지은_20150522
집단지성프로그래밍 05. 최적화(optimization) 김지은_20150522집단지성프로그래밍 05. 최적화(optimization) 김지은_20150522
집단지성프로그래밍 05. 최적화(optimization) 김지은_20150522
 
OpenStack Neutron Dragonflow l3 SDNmeetup
OpenStack Neutron Dragonflow l3 SDNmeetupOpenStack Neutron Dragonflow l3 SDNmeetup
OpenStack Neutron Dragonflow l3 SDNmeetup
 
Kernel vm#9 powerkvm-dist-20131208
Kernel vm#9 powerkvm-dist-20131208Kernel vm#9 powerkvm-dist-20131208
Kernel vm#9 powerkvm-dist-20131208
 
DragonFlow sdn based distributed virtual router for openstack neutron
DragonFlow sdn based distributed virtual router for openstack neutronDragonFlow sdn based distributed virtual router for openstack neutron
DragonFlow sdn based distributed virtual router for openstack neutron
 
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
 
Pgcon2012 ori-20120224
Pgcon2012 ori-20120224Pgcon2012 ori-20120224
Pgcon2012 ori-20120224
 
resource on openstack
 resource on openstack resource on openstack
resource on openstack
 
150326 openstack, glance 김지은
150326 openstack, glance 김지은150326 openstack, glance 김지은
150326 openstack, glance 김지은
 
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
 

Ähnlich wie 20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은

caanoo Device driver
caanoo Device drivercaanoo Device driver
caanoo Device driver
jumiss
 
운영체제 Sig2
운영체제 Sig2운영체제 Sig2
운영체제 Sig2
YoungGun Na
 
Exynos4210 beginnerrev10
Exynos4210 beginnerrev10Exynos4210 beginnerrev10
Exynos4210 beginnerrev10
mimul
 

Ähnlich wie 20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은 (20)

2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file format
 
caanoo Device driver
caanoo Device drivercaanoo Device driver
caanoo Device driver
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
운영체제 Sig2
운영체제 Sig2운영체제 Sig2
운영체제 Sig2
 
Operating system #1
Operating system #1Operating system #1
Operating system #1
 
System Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOpsSystem Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOps
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
 
UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제
 
Why OpenStack is Operating System?
Why OpenStack is Operating System?Why OpenStack is Operating System?
Why OpenStack is Operating System?
 
OpenStack
OpenStackOpenStack
OpenStack
 
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfOS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
 
[OS] Operating System 5 layer
[OS] Operating System 5 layer[OS] Operating System 5 layer
[OS] Operating System 5 layer
 
망고100 보드로 놀아보자 13
망고100 보드로 놀아보자  13망고100 보드로 놀아보자  13
망고100 보드로 놀아보자 13
 
Foss open sorucesw_6902
Foss open sorucesw_6902Foss open sorucesw_6902
Foss open sorucesw_6902
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
 
Oracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kimOracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kim
 
3. windows system과 rootkit
3. windows system과 rootkit3. windows system과 rootkit
3. windows system과 rootkit
 
Exynos4210 beginnerrev10
Exynos4210 beginnerrev10Exynos4210 beginnerrev10
Exynos4210 beginnerrev10
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1
 
ice_grad
ice_gradice_grad
ice_grad
 

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

  • 1. [UNIX V6로 배우는 커널의 원리와 구조] chapter1. UNIX V6 / chapter2. 프로세스 김지은 yeswldms@gmail.com
  • 2. 교재 UNIX V6 : UNIX V6로 배우는 커널의 원리와 구조 아오야기 타카히로 지음 조만석 옮김(IAMROOT OB님^^) 한빛소프트
  • 3. 지은이의 말 • 1975년에 벨 연구소에서 배포한 Sixth Edition Unix(이하 UNIX V6)의 커널 해석 • 커널소스 읽기 커널(Kernel) – OS의 핵심, 컴퓨터 시스템을 사용하는 데 /꼭 필요한 기능을 제공 쉘프로그램(shell program) – 커널의 기능을 이용해서 만들어진 SW OS는 프로그램을 “커널프로그램”, “사용자프로그램”으로 구분 - 컴퓨터 시스템을 큰 그림으로 이해 - 컴퓨터가 더 재밌어짐 - 컴퓨터 시스템을 구성하는 기능에 대해 더 깊게 이해할 수 있음 - 한 단계 높은 기술자로 성장할 수 있음 • 왜 UNIX V6가 교재로 좋은가? - 약 10,000의 코드(리눅스 최신 버전의 커널소스는 약 1,000줄) - 충실한 자료, Lions’ Commentary on UNIX V6 Edition with Source Code(PDP-11/40용 어셈블러 사양과 어셈플러 코드에 대한 해설도 담고있어서 함께보는 걸 권장) - PDP-11이나 주변장치 기술 사양도 검색이 쉽게 됨 - OS의 기본 아이디어 뿌리, 기초를 다지는데 적합함 - 복잡하지 않은 기능 구현 - 전체 시스템의 그림을 이해 - 에뮬레이터, 여러 프로세서를 에뮬레이션하는 simh소프트웨어를 사용해 PDP-11시리즈 기반에서 UNIX V6fmf 동 작해볼 수 있음 - 몇가지 문제점,…….. Pre K&R
  • 4. 지은이의 말 • 책의 구성 #2~4장 프로그램을 실행하고 관리하는 프로세스 2 프로세스 구조 3 프로세스 관리방법 4 스와핑처리 # 5,6장 인터럽트 처리 5 주변장치나 CPU내부에서 발생한 인터럽트처리 와 시스템 콜 6 프로세스 중단 및 변경시키는 시그널 # 7,8장 디스크 I/O처리 7 블록디바이스 8 블록 디바이스 드라이버 # 9,10장 파일시스템 9 파일시스템의 구성요소 10 파일시스템을 다루는 방법 # 11장 프로세스 간 데이터 통신인 파이프 # 12장 라인프린터같은 문자 입출력 # 13장 터미널 # 14장 시스템 초가 부팅 과정 ◀ Kernel의 전체구조ㅊ Kernel 사용자프로그램 파일 시스템 블록데바이스 문자디브바이스 서브시스템 주변 장치 터미널 CPU 메모리 디바이스 드라이버 프로세스 제어 process 버퍼 5장. 시스템 콜 5장.인터럽트 process process 6장 시그널 2,3,4장 9,10,11장 7,8,12장 13장
  • 5. 지은이의 말 • 기술방식 기본 동작을 설명하는 것을 가장 우선적인 목표 • 소스코드 설명 구조체, 함수, 스택, 레지스터, 숫자의 표기 진법 변환 • 소스코드 분석 방법 커널 명세서, 사용자 프로그램 매뉴얼 구조체 어드레스 공간, 커널어드레스 공간/사용자어드레스 공간
  • 6. Part 1. UNIX V6란?
  • 7. Chapter 1. UNIX V6의 전체 큰 그림 1.1 UNIX V6란? - Kenneth Lane Thompson과 Dennis Mac Alistair Richie가 개발 - 1975년 벨 연구소에서 발표 - 특징 1) 대부분이 C언어로 작성 2) 저작권을 허가된 사람들에게 공개함으로써, 대학등에서 각 환경에 맞게 이식되며 널리 퍼짐 3) 자신만의 독창적인 추가기능이 필요하면 소스코드를 고쳐서 사용하는 일도 많았음 이 책은, DES사의 DPD11/40이라는 프로세서에서 동작하는 커널을 다룸 1.2 UNIX 역사 - 벨 연구소에서 UNIX V6를 발표 - 1979년 Seventh Edition Unix(UNIX V7) 배포 - 1978년 버클리 대학에서 UNIX V6로 BSD 발표 - 파편화의 문제 : 표준화 규칙 POSIX라는 OS공통 API 규격발표
  • 8. Chapter 1. UNIX V6의 전체 큰 그림 1.3 UNIX V6 커널 # 시스템 자원의 사용 > 시스템자원의 사용을 위한 기능 - 프로세스 관리 - 메모리 관리 - 파일 시스템 - 파일과 주변 디바이스를 위한 공통 I/O - 인터럽트 - 터미널 지원 > 시스템의 메모리, CPU, DISK 등은 커널이나 드라이버는 추상화되어 사용자는 시스템을 편안히 사용할 수 있음 > 시스템 콜(system call)을 사용하여 시스템 자원을 사용 > 시스템에 영향을 주는 처리를 커널에서 관리, 안정성과 보안성 유지 어플리케이션 프로그램 Kernel 라이브러리, 시스템 프로그램 등 시스템 콜 라이브러리 함수 호출, 커맨드 실행 등 ▲ UNIX V6를 구성하는 소프트웨어 사용자 애플리케이션 프로그램도 직접 시스템콜 호출도 가능
  • 9. Chapter 1. UNIX V6의 전체 큰 그림 1.4 UNIX V6의 하드웨어 1.4.1 PDP-11 하드웨어 PDP-11 시리즈, Digital Equipment Corporation (DES) 사에서 제작한 프로세서 본 교재는 PDP-11/40을 대상으로 함 ◀ PDP-11/40
  • 10. Chapter 1. UNIX V6의 전체 큰 그림 - 16bit 장비, 명령어와 데이터를 기본 16bit 단위로 처리  PDP-11/40의 1워드는 16bit (word는 프로세서가 처리리하는 데이터 단위) - 전용 I/O버스가 아닌 Unibus로 입/출력 (Unibus는 18bit 어드레스 사용) - PDP-11/40의 레지스터와 주변장치의 레지스터는 메모리의 최상위 8KByte에 위치 - 메모리를 읽고 쓰듯이 각 레지스터를 읽고 씀, “메모리 맵 입출력(Memory Mapped I/O)” - MMIO(Memory Mapped I/O)방식이란? : 메모리중 일부분이 I/O장치에 할당되어, 그 주소로 읽고쓰는 것이 그 입출력 장치로의 명령으로 해석되는 방식 - UNIX V6은 왜 Unibus를 썼을까? : 그 당시 UNIX V6의 버스에 붙은 장치들이 총 4개였나? 그래서 2bit으로 표현이 가능해서.. 16bit + 2bit(주변장치 위치참조부분) = 18bit으로 주소를 참조하는 건가? PDP-11 Memory DISK Terminal unibus •DISK레지스터는 최상위 8KByte의 어드레스에 위치, MMIO(Memory Mapped I/O)방식으로 주변 장치를 조작 I/O 용 메모리 8KByte 0 어드레스
  • 11. Chapter 1. UNIX V6의 전체 큰 그림 1.4.2 PSW - Process Status Word, 프로세서 상태 워드 - 16bit 레지스터 bit 의미 15-14 현재모드(00:커널, 11:사용자) 13-12 이전모드(00:커널, 11:사용자) 7-5 프로세서 우선순위(7~0) 4 트랩 비트(trap bit) 3 N. (negative), 명령을 실행한 결과가 음수가 되었을 때 성립됨 2 Z. (zero), 명령을 실행한 결과 1 V. (overflow), 명령을 실행한 결과 오버플로우가 발생했을 때 설정 0 C. (Carry), 명령을 실행한 결과 캐리가 발생했을때 설정 •Trap bit : 스트립트 또는 쉘이 인터럽트를 가로채서 스크립트내에서 어떤 작업을 할 수 있도록 하는 기능을 제공 일반적으로 ctrl+c 등의 작업이 일어나면 시스템 관점에서는 적절한 시그널을 발생하여 처리하게 되어있다. 하지만 이러한 시그널은 어 느 시점이 발생하였는지 정확히 알 수 없어 예상치 못한 결과나 에러를 발생한다. 이때 Trap을 사용하여 미리 정의된 작업을 할 수 있 도록 한다….. 어떻게? * Carry vs OverFlow ??
  • 12. Chapter 1. UNIX V6의 전체 큰 그림 1.4.3 범용레지스터 - 8개의 범용 레지스터, r0 ~ r7 - r6레지스터(SP)는 사용자모드, 커널모드로 구분 - PSW 레지스터의 현재모드(15-14)값이 변하면 r6(SP)도 하드웨어에 의해 자동으로 보드가 바뀜 1.4.4 MMU - Memory Management Unit - 어드레스 변환과 접근 권한을 관리 - PDP-11/40은 메모리를 8KByte의 세그먼트나 페이지 단위로 관리 - 권한없는 메모리 영역에 접근하면 MMU에서 트랩 발생 - MMU는 APR레지스터를 사용해 각 세그먼트 설정 및 가상 어드레스를 물리어드레스로 변환 - MMU에는 SR0, SR2라는 2개의 상태 레지스터가 있음 - …. Bit 의미 r0, r1 계산용, 함수의 리턴값 r2, r3, r4 로컬처리 r5 프레임포인터, 환경포인터 r6(SP) 스택포인터 r7(pc) 프로그램 카운터
  • 13. Chapter 1. UNIX V6의 전체 큰 그림 1.4.4 MMU - … - MMU에는 SR0, SR2라는 2개의 상태 레지스터가 있음 SR0, 메모리 관리 유효화 플래그와 에러정보에 사용, 에러발생에도 사용(SR0[15~13]) SR2 , 실행할 명령어의16비트 가상 어드레스 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이면, 값이 갱신되어 원래 값을 잃어버리게 됨
  • 14. Chapter 1. UNIX V6의 전체 큰 그림 1.4.5 메모리 - PDP-11/40은 자기코어 메모리를 사용 - 8bit(1byte) 단위로 어드레스를 붙임. - 메모리는 18bit의 어드레스 단위를 가짐 - 용량은 2^18 = 256KByte - 상위 8KByte는 주변 장치를 위한 레지스터 매핑에 사용 - 프로세서는 메모리에 저장된 명령어와 데이터를 처리 1.4.6 블록 디바이스 - 대량의 데이터를 다루는 장치 - 일부를 swap영역으로 사용 - 스와핑 : 한정된 메모리 용량을 많은 프로그램이 사용하기 위해 커널이 데이터를 메모리에서 스와프 영역으로 밀어 놓거나, 데이터를 스와프 영역에서 메모리를 복구 1.4.7 라인 프린터 - 종이에 문자를 출력하는 장치 1.4.8 터미널 - 시스템과 사용자를 연결하는 장치. 대화형
  • 15. Chapter 1. UNIX V6의 전체 큰 그림 1.5 소스코드 - UNIX V6는 현재 BSD 라이선스 - 인터넷에서 구할 수 있음 1.6 매뉴얼 - UNIX V6는 UNIX Programmer’s Manual(UPM)이라는 사용자 매뉴얼이 있음 - 9개의 장으로 구성 - 커널의 이해에는 2장, 4장이 중요 - 실행 프로그램의 파일(a.out) 포맷을 알기위해 5장도 중요 - 사용자 영역의 시스템 프로그램을 한다면 1,3,5,8장이 중요
  • 16. Chapter 2. 프로세스 2.1 프로세스의 요소 2.1.1 프로세스란? - 어떤 프로그램이 실행되면 커널이 실행한 프로그램을 프로세스라고 함 - 커널이 관리 1) 프로그램 실행 2) 파일시스템에 파일형태로 메모리로 로드 3) 물리메모리  가상메모리공간에서 실행 4) MMU에서 가상어드레스가 물리어드레스로 변환 # 프로세스 ID - 고유의 프로세스 ID를 가짐 - 각 프로세스는 독립적인 가상어드레스 공간을 할당받음
  • 17. Chapter 2. 프로세스 2.1.2 프로세스 병렬처리 : UNIX V6는 멀티유저 모드를 지원 # TSS, Time Sharing System - 물리CPU는 1개.. 즉, 여러개의 프로세스를 실행하는 실제 프로세스는 단 하나  다른 여러 프로세스는 대기 - 물리 CPU는 한 개의 프로세스만 실행 - 짧은 시간단위로 실행할 프로세스를 바꾸어 처리하여, 여러개의 프로그램이 동시에 처리되는 것처럼 보이게 함 시간 프로세스 1 프로세스 2 프로세스 3 실행 프로세스
  • 18. Chapter 2. 프로세스 2.1.3 프로세스 상태 - 커널은 실행 가능한 상태에 있는 프로세스 중 한 개를 실행 프로세스로 선택 2.1.4 사용자 모드와 커널 모드 # 프로세서 모드 - 모드가 바뀌면, MMU에서 가상 어드레스에 대응하는 메모리 공간도 바꿈 - PSW(Process Status Word)를 사용하여 바꿈 상태 의미 실행가능상태 실행 프로세스와 실행 가능한 상태로 대기하는 프로세스 슬립상태 - CPU자원이 해제되기 전까지 기다림 - 주변 장치에서 처리가 끝나기를 기다림 - 처리를 계속 진행하지 않는 프로세스 모드 가상 어드레스 공간, 프로세스 사용자모드 사용자 공간, 사용자 프로세스 커널모드 커널 공간, 커널 프로세스
  • 19. Chapter 2. 프로세스 # 시스템 콜 - 커널 기능을 사용하기 위해선 시스템 콜을 호출하여 원하는 커널 기능을 실행 할 것을 요청 - 시스템 콜 호출 시, 커널모드로 전환 - 커널 처리 종료 후, 사용자 모드로 전환 - 사용자 공간  커널 공간 : fubyte(), fuibyte(), fuword(), fuiword(), subyte(), suibyte(), suword(), suiword() 함수 사용 (u :user, s :store, f: fatch, i :interupt) # 커널 모드 - 시스템 자원을 직접관리 - 커널 기능을 사용하려면 커널에 정식 수단으로 요청해야함 사용자 모드 커널 모드 커널 기능 사용요구 커널 모드로 바뀜 사용자 모드로 되돌아감
  • 20. Chapter 2. 프로세스 2.1.5 스와핑 - 스와핑은 시스템이 부팅할 때 생성된 프로세스가 처리 2.2 Proc 구조체와 User 구조체 - 각 프로세스 상태정보와 제어정보를 한 쌍의 Proc 구조체와 User 구조체로 관리 - 프로세스 당 각각 한 개씩 할당 - Proc 구조체 : 메모리에 항상 로드되어있음 - User 구조체 : 스와프 아웃 대상이 됨 종류 의미 Swap out 프로세스가 늘어나 메모리가 부족해지면, 커널은 슬립 상태에 있는 프로세스나 우선순위가 낮은 프로세스를 메모리에서 스와핑 역역으로 이동 Swap in 스와프아웃된 프로세스 중, 실행 상태로 된 프로세스를 다시 스와핑 역역에서 메모리오 이동
  • 21. Chapter 2. 프로세스 2.2.1 Proc 구조체 - proc[] - 각 엔트리는 한 개의 프로세스에 대응 - 프로세스에 관련된 정보 중, 프로세스 상태나 실행 우선순위등의 정보를 포함  커널에서 항상 필요한 정보(메모리 에 항상 상주) - proc[]의 엔트리 수 : #define NOROC 50, 시스템은 proc[]의 엔트리 수보다 더 많은 프로세스를 가지지 못함 표, proc 구조체 - Proc[]는 배열로써 정적할당(50개의 엔트리)되어있고, swap-out되면 p_stat의 상태를 바꾸고, 새로운 프로세스가 swap-in되면 새로 써줌 요소 의미 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 프로세스를 실행한 터미널 …
  • 22. Chapter 2. 프로세스 표, 프로세스 상태 표, 플래그 상태 의미 SSLEEP 슬립, 실행 우선순위가 음수값으로 슬립상태 SWAIT 슬립, 실행 우선순위가 0이상으로 슬립상태 SRUN 실행가능 상태 SIDL 프로세스 생성 중 SZOMB 좀비 상태 SSTOP 트레이스 개입을 기다림 플래그 의미 SLOAD 메모리에 있음(스와프 아웃되지 않음) SSYS 시스템 프로세스로, 스와프 대상이 아님. UNIX V6에서 procp[0]만 가능 SLOCK 스와프 아웃되는 것을 막음 SSWAP 스와프 아웃으로 user.u_rsav[]의 값이 부정됨 STRC 트레이스 중 SWTED 트레이스 처리에 사용
  • 23. Chapter 2. 프로세스 2.2.2 user 구조체 - user[] - 프로세스가 오픈한 파일이나 현재 디렉터리 정보등을 담고있음 - 실행 프로세스를 제외한 user 구조체에서는 커널에서 필요하지 않기 때문에, 프로세스가 스와프아웃되면 user 구조체도 함께 스와프 아웃 표, user 구조체 요소 의미 u_procp 이 user구조체에 대응된 proc[]엔트리를 가리킴 u_base 파일을 읽고 쓸 때 매개변수를 넘겨 줄 때 사용 u_count 파일을 읽고 쓸 때 매개변수를 넘겨 줄 때 사용 u_offset[] 파일을 읽고 쓸 때 매개변수를 넘겨 줄 때 사용 u_cdir 현재 디렉터리의 inode[] 엔트리 u_dirp 사용자 프로그램, 혹은 커널 프로그램에서 가리키는 파일의 경로를 읽을 때 사용 u_pdir namei()에 대상되는 파일, 데렉터리의 부모 디렉터리를 저장 u_ar0 시스템 콜 처리시 사용자 프로세스의 범용레지스터나 PSW 조작을 할 때 사용 …
  • 24. Chapter 2. 프로세스 2.2.2 user 구조체 표, 에러코드 (u_error) # 전역변수 u - 커널은 전역변수 u를 사용하여 실행 프로세스의 user 구조체에 접근 - u를 사용해서 접근해야 하는 이유? (더 뒤에서 설명…) u(conf/m40.s) 1 .globl _u 2 _u = 0140000 요소 의미 EFAULT 사용자 공간과 커널 공산 사이에 데이터 전송이 실패했을 때 등 EPERM 슈퍼 유저가 아님 ENOENT 지정돈 파일이 없음 ESRCH 시그널을 받는 프로세스가 없거나 이미 사라짐 EINTR 시스템 콜 처리 중에 시그널 처리를 했음 EIO I/O 에러 …
  • 25. Chapter 2. 프로세스 2.3 프로세스의 메모리 할당 - 하나의 프로세스는 텍스트 세그먼트와 데이터 세그먼트라는 연속된 두 개의 물리 메모리 영역을 할당 - 물리 메모리 공간은 프로세스의 가상 어드레스로 변환 2.3.1 텍스트 세그먼트 - 프로그램의 실행코드 - 읽기전용 - 여러 프로세스가 공유 (하나의 프로그램을 동시에 여러개를 실행하는 경우) - text[]로 관리, 텍스트 세그먼트의 크기는 uer.u_tsize
  • 26. Chapter 2. 프로세스 2.3.2 데이터 세그먼트 - 프로그램이 사용하는 변수같은 데이터를 저장 - 여러 프로세스가 공유 할 수 없음, 공유된다면 다른 프로그램에 영향을 끼침 - 데이터 세그먼트의 물리 어드레스: proc.p_addr, 크기 : proc.p_size - 데이터 세그먼트의 구조 요소 의미 PPDA Per Process Data Area User구조체와 커널 스택영역으로 구성 크기 : USIZE x 64byte = 1KByte(사용자 공간에서는 사용할 수 없음) 커널스택영역 : 커널동작을 위한 작업영역으로 사용. 프로세스마다 커널모드용으로 작업영역을 설정 Data 영역 전역변수나 bss가은 정적 변수가 위치하는 영역과 프로세스가 동적 메모리 영역으로 관리하는 힙영역 으로 구성 힙 영역 확장 시 시스템 콜을 호출 힙 영역은 가상 어드레스의 작은 값에서 큰 값으로 확장 크기 : user.u_dsize 스택 영역 함수의 매개변수나 로컬 데이터등을 임시로 저장하는 영역 필요에따라 자동으로 확장 스택영역은 가상 어드레스의 최상위 어드레스에서 작은 값으로 확장 크기 : user.u_ssize
  • 27. Chapter 2. 프로세스 # USIZE(param.h) 1 #define USIZE 16 그림. 데이터 세그먼트 user 구조체 커널 스택 영 역 데이터 영역 (힙) PPDA 스택 영역 물리 메모리 USIZE user_u.dsize user_u.ssize proc.p_size proc.p_addr
  • 28. Chapter 2. 프로세스 2.3.3 가상 어드레스 공간 프로세스는, - 64KByte의 가상 어드레스 공간을 사용 - 16bit의 가상 어드레스 공간을 가짐 - 가상어드레스는 MMU에서 18bit 물리 어드레스로 바뀌어 물리 메모리에 접근 표, 가상 어드레스 공간과 물리 어드레스 공간 - 텍스트 세그먼트(process의 실행코드 저장)는 가상 어드레스 공간의 최하위 어드레스(0x0)를 할당받음 - 데이터 영역은 텍스트 세그먼트에서 8KByte 더한 어드레스를 할당 - 스택 영역은 최상위 어드레스 (0xffff)를 할당 공간 어드레스 용량 가상 어드레스 공 간 16비트 가상 어드레스 64 KByte 물리 어드레스 공 간 18비트 가상 어드레스 256 KByte
  • 29. Chapter 2. 프로세스 2.3.3 가상 어드레스 공간 cf. 데이터영역이 고정사이즈인 이유.. 요즘은 작은 영역을 모아서 하나의 논리 메모리 영역으로 만들고, 다시 쪼개서 사 용할 수 있었지만 과거 UNIX V6에서는 해당 기술이 가능하지 않았다. 그냥 고정으로 할당받은 후 쪼개 쓰는 것까지만 가 능했다. - 프로세스마다 독립된 가상 어드레스 공간을 사용 - 커널은 데이터영역과 스택영역으로 별도의 세그먼트로 나누어 APR을 설정(뒤에서 설명) - 데이터영역: 데이터세그먼트, 스택영역: 스택세그먼트 # 가상메모리의 이점 - 프로그램을 임의의 어드레스부터 시작할 수 있음 - 메모리 접근을 관리할 수 있음 - 메모리 효율을 높일 수 있음 0xffff 가상 어드레스 공간 텍스트 세그먼 트 user_u.tsize 스택 영역 user_u.ssize 데이터 영역 user_u.dsize 0 “u” 변수가 시작부분을 가리킴 0 mod 8k 힙 확장영 역 스택 확장영 역 데이터 세그먼트
  • 30. Chapter 2. 프로세스 2.3.3 가상 어드레스 공간 그림. 물리어드레스와 가상어드레스 공간 물리 어드레스 공간 텍스트 세그먼트 0x3fff PPDA 데이터 영역 PPDA 데이터 영역 물리 어드레스 0 텍스트 세그먼트 데이터 영역 스택 영역 텍스트 세그먼트 데이터 영역 스택 영역 가상 어드레스 0 0xffff 프로세스 B의 가상 어드레스 공간 프로세스 A의 가상 어드레스 공간 가상 어드레스 0 0xffff
  • 31. Chapter 2. 프로세스 2.3.4 어드레스 변환 - MMU : 가상 어드레스를 물리 어드레스로 변환 - MMU는 변환을 위해 두 개의 레지스터를 가짐(PAR, PDR) - PAR(Page Address Register) + PDR(Page Description Register) = APR(Active Page Register) - 각 사용자 프로세스마다 APR값을 user구조체에 저장, 프로세스가 실행되면 user 구조체를 가지고 사용자 APR값 을 설정 물리어드레 스 PAR PDR APR User 구조체 MMU가상어드레 스 그림. 어드레스 변환 bit 의미 11~0 베이스 어드레스(64byte 단위) bit 의미 14~8 페이지 블록 수 6 데이터 비트, 갱신됨을 나타냄 3 비트가 1이면, 큰 어드레스에서 작은 어드레스 방향으로 할당 2~1 접근제어 00 : 할당하지 않는다. 01: 읽기전용 11 : 쓰기가능 표. PAR 표. PDR
  • 32. Chapter 2. 프로세스 # PDP-11/40 - 2개의 APR을 가짐: 커널모드용, 사용자 모드용 - PSW의 현재 모드가 바뀌면 APR이 하드위어적으로 바뀌면서(물리적인 정보들이 갱신됨을 의미하는 것 같음), MMU가 가상 어드레스 공간을 변환 - APR은 0부터 7까지 총 8쌍이 있음. - 실행 프로세스에 커널이 사용자 프로세스용의 APR을 설정하면, 각 사용자 프로세스는 독립된 가상 어드레스 공간 을 확보 - 각 사용자 프로세스의 APR 값은 user 구조체에 저장 - 각각의 프로세스가 실행 프로세스가 되면, 사용자 프로세스용으로 APR 값이 설정됨 PSW 15 14 13 0 커널(00) 사용자(11) APR1 APR0 APR2 … APR7 APR1 APR0 APR2 … APR7 그림. APR의 전환
  • 33. Chapter 2. 프로세스 - APR은 0부터 7까지 8쌍 - 프로세스의 가상 어드레스 공간을 페이지, 혹은 세그먼트 단위로 관리 - 한쌍의 APR은 한 페이지에 대응 - PAR은 각 페이지가 가리키는 물리 어드레스의 베이스 어드레스 저장 - PDR은 각 페이지의 블록(64byte 단위)수나 접근 여부 등의 정보 저장 - 한 페이지에 최대 128블록(8KByte)을 할당  페이지( or 세그먼트) : 프로세스의 가상 어드레스 공간  1개의 프로세스는 총 8쌍의 APR을 가질 수 있음(커널영역8개, 사용자영역8개)  PDR은 128개의 블록으로 쪼개어 관리 될 수 있다. Q. 프로세스 하나당 한쌍의 APR을 가지면, 최대 8개의 프로세스만 메모리가상화기법을 사용하는 건가? 앞에서는 각 프 로세스마다 APR을 user 구조체에 넣는다고 했고, user구조체는 proc구조체에 매핑되고, 즉 최대 50개의 프로세스가 돌 아 갈 수 있는데… 무슨 말인지 잘 이해가 안감
  • 34. Chapter 2. 프로세스 그림. 물리 어드레스 계산 u (0140000(8)) 1100 0000 0000 0000(2) - 가상 어드레스의 상위 3비트 [15~13]로 페이지(APR)가 선택되면, - 선택된 APR의 PAR(11~0]비트는 물리 어드레스의 베이스 블록 어드레스(베이스 블록 No.)값이 결정 - 물리 어드레스의 베이스 블록 어드레스값과 가상어드레스의 [12~6]비트(가상 어드레스의 블록 No.)를 더해서 물리 메모리의 블록 어드레스(물리블록 No.) [17~6]비트를 구함 0 베이스 블록 No. 12 1115 블록No. 블록 내에 오프셋 15 13 12 6 5 0 PAR[0]~[7] 가상 어드레스 블록 내에 오프셋물리 블록 No. 17 6 5 0 물리 어드레스 ADD : 110(2)6(10), 즉 PAR[6] : 00 0000: 0 0000 00 가상어드레스의 [12~6] PAR[11~0] : 물리 어드레스의 베이스 블록 어드레스 값 : 물리 메모리의 블록 어드레스[17~6] 물리메모리의 블록 어드레스 [17~6]비트와 가상어드레스 블록 내의 오프셋값[5~0]비트를 더하여 물리 어드레스 [17~0]비트를 구함
  • 35. Chapter 2. 프로세스 그림. u에서 user 구조체 액세스 - 커널이 전역변수 u(0140000)을 사용하여 실행 프로세스의 user 구조체에 접근 가능 - 커널 모드용으로 실행 프로세스의 6번째 PAR을 데이터 세그먼트의 물리 어드레스(proc.p_addr)로 설정 - 커널 모드용 APR : 커널 APR - 사용자 모드용 APR : 사용자 APR - 0~n번째 까지의 APR : APRn - 메모리 블록은 블록 디바이스의 블록(512byte)과 혼동되므로, 이 책에선 메모리 블록을 “64바이트 단위의 영역” 이 라 함 커널 APR APR1 APR0 APR2 APR3 APR7 APR4 APR5 APR6 User 구조체 커널스택 물리메모리 실행 프로세스의 데이터 세그먼트 0x00000 0x3FFFF 물리 어드레스 proc.p_addr (각 프로세 스마다의 addr) 1100 0000 0000 0000 : u는 커널공간의 6페이지째 처음 을 가리킴