Presentation is loading. Please wait.

Presentation is loading. Please wait.

15장 프로세스 주소 공간 Jinhee, Park.

Similar presentations


Presentation on theme: "15장 프로세스 주소 공간 Jinhee, Park."— Presentation transcript:

1 15장 프로세스 주소 공간 Jinhee, Park

2 프로세스의 주소공간 주소공간 프로세스 가상 메모리와 가상 메모리 내의 사용 가능한 주소로 구성
아키텍처 별 32bit/64bit의 주소공간이 주어짐 현재는 연속된 범위의 주소를 갖는 전체메모리 방식을 사용함 특정 바이트의 주소공간(메모리영역)은 프로세스가 접근할 수 없음 프로세스 유효 메모리 영역에 해당하는 부분만 접근 가능 쓰기 읽기 실행 등 권한이 지정되어있음 유효한 영역 외의 영역에 접근 시 Segment fault 허락한 권한 외의 방법으로 접근 시 Segment fault

3 프로세스의 주소공간 메모리 영역 실행 파일 코드가 할당 된 메모리 실행 파일의 초기 값이 있는 전역변수가 할당된 메모리
초기값이 없는 전역 변수가 들어있는 제로 페이지(bass영역) 사용자 공간 스택으로 사용하는 메모리 C 라이브러리 및 동적 링커 같이 공유 라이브러리를 위한 텍스트, 데이터, bass 영역 공유메모리 Malloc() 등 함수과 관련된 할당 메모리

4 메모리 서술자 메모리 서술자 프로세스의 메모리 주소공간을 표현하는 자료구조
<linux/mm_types.h>에 mm_struct라는 이름으로 정의됨 mmlist 항목을 통해 이중 연결리스트로 단단히 연결됨

5 메모리 서술자 할당 메모리 서술자 할당 메모리 서술자는 프로세스 서술자의 mm항목을 통해 연결
<linux/sched.h>의 task_struct 구조체를 사용해서 표현 됨(예 fork) 부모 프로세스의 메모리 서술자를 자식 프로세스로 복사 현재 프로세스의 메모리 서술자를 뜻함

6 메모리 서술자 할당 메모리 서술자 할당 mm_struct 구조체의 할당해주는 함수
<kernel/fork.c> 내부에 정의 프로세스는 독자적인 프로세스 주소공간을 받음 Clone() 함수에 CLONE_VM 플래그를 지정 자식 프로세스와 주소공간을 공유할 수 있는 프로세스를 스레드라고 부름 CLONE_VM 설정시 allocate_mm() 함수가 호출되는 대신 프로세스의 mm 항목이 부모 프로세스를 가리키도록 함 If(clone_flages & CLONE_VM) { Atomic_inc(&current->mm->mm_users); tsk->mm = current->mm; }

7 메모리 서술자 해제 메모리 서술자 해제 해제 순서 Exit_mm() mm_put() mm_user=0 mmdrop()
mm_uers 사용자 값 줄임 mm_user=0 mmdrop() mm_count=0 free() 슬랩캐시로 돌아감

8 구조체와 커널 스레드 커널 스레드 커널 스레드의 프로세스 서술자 mm항목 = NULL
프로세스 주소 공간이 없기 때문에 메모리 서술자도 없음 사용자 공간에 있는 페이지도 없어 자체적 메모리 서술자나 페이지 테이블이 필요 없음 커널 메모리에 접근 시 페이지 테이블 등이 필요한 경우 메모리 서술자를 이용해 메모리 소모 이전 실행한 프로세스의 페이지 테이블을 이용 커널 스레드는 항목이 없기 때문에 mm = NULL 이전의 실행한 프로세스의 mm이 로드 Active_mm을 갱신해 새 주소 공간을 가리키도록 함 그러나 mm=NULL이므로 이전 프로세스의 주소공간을 그대로 둠 Active_mm을 커널 스레드가 접근하려는 곳으로 갱신함 커널 스레드는 사용자 공간 메모리에는 접근하지 않음

9 가상메모리 영역 가상메모리 영역 구조체 vm_area_struct는 메모리 영역을 표현
커널은 각 메모리 영역을 독립된 메모리 객체로 간주 영역별 권한 및 관련 작업을 별도로 가질 수 있음 Vm_mm은 VMA에 해당하는 mm_struct 가리킴 VMA 별 고유한 mm_struct가 있음

10 VMA 플래그 VMA 플래그 <linux/mm.h> 정의
메모리 영역의 동작과 메모리 영역이 들어있는 페이지에 대한 정보 제공 커널이 책임지는 동작 지정

11 VMA의 동작 VMA의 동작 VMA의 동작테이블은 <linux/mm.h>파일에 구조체로 정의됨
동작테이블을 통해 특정 객체에 대한 구체적 동작을 작성 Void open 메모리 영역을 주소공간에 추가할 때 호출 Void close 주어진 메모리 영역을 주소공간에 제거할 때 호출 Int fault 물리적 메모리에 없는 페이지에 접근할 경우 핸들러 호출 Int page_mkwrite 읽기 전용 페이지를 쓰기전용으로 변경할 시 Int access get_user_pages() 호출이 실패했을 때 호출 Struct vm_operations_struct { void (*open)(struct vm_area_struct*); void (*close)(struct vm_area_struct*); int (*fault)(struct vm_area_struct*, struct vm_area_fault*); int (* page_mkwrite)(struct vm_area_struct*, struct vm_area_fault*); int (*access)(struct vm_area_struct*, unsigned long, void*, int, int); }

12 메모리 영역 리스트와 트리 메모리 영역 리스트와 트리 메모리 영역은 mmap과 mm_rb 두 항목으로 접근 가능 Mmap
모든 메모리 영역 객체를 하나의 연결리스트로 저장 Vm_area_struct 구조체의 mm_next 항목을 이용해 연결 마지막 구조체는 next항목이 NULL 모든 메모리를 찾을 때 호출 Mm_rb 자료구조의 레드블랙트리 형태로 연결 Vm_area_struct구조체가 하나의 노드로 연결 됨 특정 메모리 영역을 찾을 때 사용

13 메모리 영역 다루기 메모리 영역 다루기 Find_vma()
다음에 사용하는 모든 함수는 <linux/mm.h> 파일에 선언되어있음 Find_vma() VMA내의 특정 주소를 찾아내는 함수 주어진 주소 공간에 대해 vm_end 항목이 addr보다 큰 첫 번째 메모리 영역을 찾음 반드시 들어있지 않을 경우도 존재함 실행 결과는 mmap_cache 항목에 캐시됨 레드블랙트리를 이용해 처리

14 메모리 영역 다루기

15 메모리 영역 다루기 Find_vma_prev() Find_vma_intersection() 앞의 함수와 동일하게 동작
Addr 이전의 마지막 VMA를 반환한다는 점이 다름 Find_vma_intersection() 지정 주소 범위와 중첩되는 VMA를 반환함 Find_vma와 동일한 VMA를 반환할 경우도 있음

16 메모리 영역 다루기 Mmap()과 do_mmap() Do_mmap() 함수는 커널이 연속된 주소 범위를 새로 만들 때 사용
이전 VMA의 주소공간과 병합이 불가능할 때 생성 File이 지정한 offset 위치의 len길이만큼 주소 범위 할당 File 인자에 0을 지정하고 offset 인자에 0을 지정하면 파일 지정할당 아닐 경우엔 익명할당 Flag에는 아키텍처별 설정 된 페이지 보호플래그를 사용

17 메모리 영역 다루기 Mmap()과 do_mmap() 주소 범위 해제 Mmap2의 함수는 페이지 단위 오프셋 값을 사용함
Do_munmap() 함수를 사용해 주소범위를 제거함 Start 주소에서 len 길이의 제거할 주소범위를 설정 특정 주소 범위를 제거할 수 있는 함수로 munmap()를 제공 Void mmap2(void *start, size_t length, int prot, int flags, int fd, off_t pgoff)

18 페이지 테이블 페이지 테이블 애플리케이션이 가상 메모리 주소에 접근시 가상 메모리 주소를 물리적 메모리 주소로 변환시 사용
애플리케이션이 가상 메모리 주소에 접근시 가상 메모리 주소를 물리적 메모리 주소로 변환시 사용 리눅스의 경우 세 단계의 페이지 테이블로 구성 아키텍처에 따라 구조체는 다른 모습을 보임 페이지 테이블의 성능을 높이기 위해 TLB를 둠 PGD 최상위 페이지 테이블은 페이지 전역 디렉토리 두 번째 PMD 테이블을 가리킴 PMD 페이지 중간 디렉토리 PTE 항목을 가리킴 PTE 이 페이지 테이블은 물리적 페이지 테이블을 가리킴


Download ppt "15장 프로세스 주소 공간 Jinhee, Park."

Similar presentations


Ads by Google