Introduction to Tizen Platform - SKKUnyx.skku.ac.kr/wp-content/uploads/2016/03/Lecture8-Week... ·...

Preview:

Citation preview

38

1

Embedded Software Lab.

Sungkyunkwan University

Embedded Software Lab.

Dongkun Shin

전공핵심실습1:운영체제론Chapter 8. Kernel Memory Management

38

2

Embedded Software Lab.

Contents

38

3

Embedded Software Lab.

• Physical Address– Used to address memory cells in memory chips.

• Linear Address (Virtual Address)– Single 32-bit unsigned integer used to address up to 4GB.

• Logical Address– The address that embodies 80x86 segmented architecture

Linux Memory Address

Physical Memory Cells

Paging Unit

Pages

Segmentation Unit

SegmentsAbstraction

38

4

Embedded Software Lab.

• Paging Unit– Translate Linear Address Physical Address

– Check access privilege of Linear Address

• Kernel or User mode, write or read privilege

• Page– Linear addresses are grouped in fixed-length intervals

• Page Frame– Corresponding memory cells to the page

• Page Table– The data structures that map linear to physical addresses

– Stored in main memory

Paging Terminology

Typical 4KB in 32-bit machine

38

5

Embedded Software Lab.

• Q) Why 2-level?– A) To save memory

Regular Paging

Each entry has same format

• Present Flag• 20bit page frame addr• Accessed Flag• Dirty Flag• Read/Write Flag• User/Supervisor Flag• Page Size Flag• Global Flag

38

6

Embedded Software Lab.

• Extended Paging– Is used to translate large contiguous linear address ranges

into corresponding physical ones.

– Page Size flag = 1

– Page size : 4MB

Extended Paging

38

7

Embedded Software Lab.

• Page table entry cache (Linear Physical address)

Translation Lookaside Buffer

38

8

Embedded Software Lab.

• Compatible with both 32bit and 64bit paging

• 4-level paging model

Paging in Linux

# of bit Depending on Arch

38

9

Embedded Software Lab.

• Defined in <asm/page.h>

Paging Macro in Linux

ex) alpha

38

10

Embedded Software Lab.

• Kernel must build a physical addresses map during the initialization

• Specifies which physical address ranges are usable and which are unavailable– Some address range are used by I/O shared memory or BIOS

data

• Reserved Memory Space– Unavailable address range

– Page frame containing kernel’s code and initialized data structures

• Never be dynamically assigned or swapped to disk.

Physical Memory Layout

38

11

Embedded Software Lab.

• Each Process has different Global Directory Table

• But ¼ of Global Directory entry is same

Process Page Table

38

12

Embedded Software Lab.

1. Create Mapping– In initial phase work with Real Mode (16bit)

– To access both Real and Protect mode mapping

– Initialize with : Linear A. 0x00000000~0x007FFFFF Physical A. 0x00000000~0x007FFFFF

– Linear A. 0xC0000000~0xC07FFFFFPhysical A. 0x00000000~0x007FFFFF

Procedure for kernel to create page table

38

13

Embedded Software Lab.

1. Create Mapping

2. Kernel creates the desired mapping by filling all the swapper_pg_dir entries with zeroes.

3. startup_32() : Enable paging unit

4. paging_init() : Initialize Master Kernel page Global Directory

Procedure for kernel to create page table

38

14

Embedded Software Lab.

• How the kernel allocates dynamic memory– Contiguous memory area

• Page Frame Management

• Memory Area Management

– Non-contiguous memory area

• Non-contiguous Memory Area Management

Memory Management

38

15

Embedded Software Lab.

• Describe current status of the page frame

Page Descriptor

38

16

Embedded Software Lab.

• Documented/documentation/vm/pagemap.txt

Page Flag

38

17

Embedded Software Lab.

• Node Descriptor– Each node has a descriptor of type pg_data_t

– All node descriptors are stored in a singly linked list, whose first implement is pointed by the pgdat_list variable

– node_zones: Array of zone descriptors of the node

– node_start_pfn: Index of the first page frame in the node

– node_id: Identifier of the node

Node

38

18

Embedded Software Lab.

• DMA ( Direct Memory Access ) processor can access to only first 16MB of RAM: zone_dma

• Some memory region is linearly mapped:– zone_normal

• Some memory region cannot be reached by kernel directly– zone_highmem (Kernel reaches anywhere in 64bit)

• Zone descriptor: struct_zone(/include/linux/mmzone.h)

Zone

38

19

Embedded Software Lab.

Zoned page frame allocator

38

20

Embedded Software Lab.

• Flag used in request for page frames

GFP flag

38

21

Embedded Software Lab.

• All free page frames are grouped into 11 lists of blocks that contain groups of 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, and 1024 contiguous page frames.(1024 page frames = 4MB) Method to solve the external fragmentation problem.

Buddy Algorithm

38

22

Embedded Software Lab.

• Prevent from internal framgenetation

• Used for allocation of little memory like few bytes or few hundreds bytes.

Slab Allocator

38

23

Embedded Software Lab.

• Create slab – cache_grow()

– Request for new object &&

– No free object in cache

• Release slab – cache_destroy()

– Too many free object ||

– Reclamation by timer function

Slab Allocator (cont.)

38

24

Embedded Software Lab.

• Allocate physically contiguous memory.

• Used for small memory allocation.

kmalloc()

38

25

Embedded Software Lab.

• Allocate virtually contiguous memory.– Non-contiguous memory area management

• Non-contiguous memory area management– The main advantage is to avoid external fragmentation.

– The disadvantage is to fiddle with the kernel page tables.

• Cannot reach outside of processor– Each page frames allocated by vmalloc() must be accessed by

referencing to MMU MMU is in-processor unit.

vmalloc()

38

26

Embedded Software Lab.

• vmalloc() only allocates vm_struct

Descriptor of non-contiguous memory areas

vmlist vm_struct

next

vm_struct

next

vm_struct

next

/include/linuxextern variable

– addr

• Linear address of the first memory cell of the area

– nr_pages

• Number of pages

– struct page **

• pointer of array of pages

– next

38

27

Embedded Software Lab.

Buddy Allcator

38

28

Embedded Software Lab.

• 간이 Buddy Allocator의 구현

• 전체 Page Frame수 : 16

• 초기 Free List 및 메모리 상태

실습

4

3

2

1

0

0

• 실습내용– 다음 각각의 커맨드 이후의 Free List 상태 출력

– alloc(5p), alloc(1p), alloc(2p), alloc(2p), alloc(1p), alloc(1p), free(10), free(12), free(14), free(0)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

FreeAllocated

38

29

Embedded Software Lab.

실습

4

3

2

1

0

8

alloc(5p)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

FreeAllocated

38

30

Embedded Software Lab.

실습

4

3

2

1

0

12

alloc(5p), alloc(1p)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

FreeAllocated

10

9

38

31

Embedded Software Lab.

실습

4

3

2

1

0

12

alloc(5p), alloc(1p), alloc(2p)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

FreeAllocated

9

38

32

Embedded Software Lab.

실습

4

3

2

1

0

14

alloc(5p), alloc(1p), alloc(2p), alloc(2p)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

FreeAllocated

9

38

33

Embedded Software Lab.

실습

4

3

2

1

0

14

alloc(5p), alloc(1p), alloc(2p), alloc(2p), alloc(1p)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

FreeAllocated

38

34

Embedded Software Lab.

실습

4

3

2

1

0 15

alloc(5p), alloc(1p), alloc(2p), alloc(2p), alloc(1p), alloc(1p)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

FreeAllocated

38

35

Embedded Software Lab.

실습

4

3

2

1

0 15

alloc(5p), alloc(1p), alloc(2p), alloc(2p), alloc(1p), alloc(1p), free(10)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

FreeAllocated

10

38

36

Embedded Software Lab.

실습

4

3

2

1

0 15

alloc(5p), alloc(1p), alloc(2p), alloc(2p), alloc(1p), alloc(1p), free(10), free(12)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

FreeAllocated

10 12

38

37

Embedded Software Lab.

실습

4

3

2

1

0 15

alloc(5p), alloc(1p), alloc(2p), alloc(2p), alloc(1p), alloc(1p), free(10), free(12), free(14)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

FreeAllocated

10 12

14

14

12

38

38

Embedded Software Lab.

실습

4

3

2

1

0

alloc(5p), alloc(1p), alloc(2p), alloc(2p), alloc(1p), alloc(1p), free(10), free(12), free(14), free(0)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

FreeAllocated

10

12

0