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

Slides:



Advertisements
Similar presentations
1.
Advertisements

공교육 정상화 및 선행학습 금지 학부모 연수 부천송일초등학교.
KEY 디바이스 드라이버 Lecture #12. 2 차례 GPIO 및 Control Registers KEY 하드웨어 구성 KEY Driver 프로그램 key-driver.c 시험 응용 프로그램 key-app.c.
컴퓨터 개론 및 실습 강의 9.
제12장 표준 입출력과 파일 입출력.
Project #2-2. Pintos User Program
Oracle Embedded SQL Pro*C : Chap 5 Copyright by SunYoung Kim
Internet Computing KUT Youn-Hee Han
13장 소켓.
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
01 화일의 기본 개념 02 화일 저장장치 03 화일 입출력 제어 04 순차화일 05 화일의 정렬 06 화일의 합병
Software Research Center
Linux System Programming
Department of Computer Engineering
System Call Linux Kernel 수업 3번째.
순환&면역 6조 박아름 이명동 최제춘.
디바이스 드라이버 기초 디바이스 드라이버의 개요 파일 연산 디바이스 드라이버 등록 디바이스 드라이버 구성
이식성과 데이터형 서로 다른 프로세서 상에서의 이식성을 위해 가급적 리눅스 커널이 제공하는 데이터형을 사용하는 것이 좋다.
디바이스 드라이버 개요 가상 디바이스드라이버 실습
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
연결리스트 (Linked List) 충북대학교 컴퓨터공학과 서 영 훈.
TCP Client/Server Program
Network Lab. Seoung Hyeon, Lee
Linux System Programming
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express Slide 1 (of 23)
HW#1 Source 파일 제출 3.20(수)까지 제출 학번_이름_01.c
Part 14 파일 입출력 ©우균, 창병모 ©우균, 창병모.
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
14장 소켓.
head data link data link data link NULL a b c
10장 메모리 관리.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
25장. 메모리 관리와 동적 할당.
Department of Computer Engineering
Input/Output Control.
Socket Address Structure and Byte Ordering Functions
링크 파일 생성[1] 링크 하드링크 생성 : link(2) 이미 있는 파일이나 디렉토리에 접근할 수 있는 새로운 이름
Linux/UNIX Programming APUE (Files & Directories)
Socket Address Structure and Byte Ordering Functions
Department of Computer Engineering
파일 기술자 복사 파일 기술자 복사 : dup(2) 파일 기술자 복사 : dup2(3)
8 메모리 매핑.
Advanced Socket Programming
(ioctl, mmap, fsync&flush)
커널 모듈 프로그래밍 (Kernel Module Programming)
프로그래밍2 및 실습 C언어 기반의 C++ 2.
Department of Computer Engineering
14주차.
10장 C 표준 파일 입출력 子曰 學而時習(실습?)之 不亦悅乎.
문자 디바이스 드라이버 임베디드 시스템.
Memory & Data Management.
고구려,백제,신라의 건국과 발전 Start!
Analog to Digital Converter
네트워크 프로그래밍의 이해 School of Electronics and Information.
리눅스 디바이스 드라이버 (Linux Device Driver)
Stepper Motor 디바이스 드라이버
2 배열과 구조.
소켓버퍼(sk_buff) 이재연
우리나라의 수자원 물 보기를 금같이 우리나라의 수자원 현황 우리나라의 수자원 이용 현황.
자료구조 (Data Structure).
지역의 자연 환경과 인문환경 조사 사회 1학년 1학기 Ⅰ.지역과 사회 탐구>1.지역사회의 지리적 환경(3/6
가을에 만날 수 있는 곤충.
제 14 장 응용 계층과 클라이언트-서버 모델 클라이언트-서버 모델 14.2 동시성 14.3 프로세스 14.4 요약.
유체역학 마이크로마노미터의 이론과 공식을 설명하라. 환경공학과 김기복.
06. 디바이스의 등록과 해제 김진홍
유예 X-FILE *조사자* 1301권희원 1315이예지 1317장아정 1322홍자현.
Virtual Machine Management
3장 파일 다루기 한빛미디어(주).
Department of Computer Engineering
Presentation transcript:

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

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

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

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

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

메모리 서술자 할당 메모리 서술자 할당 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; }

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

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

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

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

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); }

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

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

메모리 영역 다루기

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

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

메모리 영역 다루기 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)

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