����14-25 linux/include/linux/mm.h
1 #ifndef _MM_H
2 #define _MM_H
3
4 #define PAGE_SIZE 4096 // ����1ҳ�ڴ�ҳ���ֽ�����ע����ٻ���鳤����1024�ֽڡ�
5
6 #include <linux/kernel.h> // �ں�ͷ�ļ�������һЩ�ں˳��ú�����ԭ�Ͷ��塣
7 #include <signal.h> // �ź�ͷ�ļ��������źŷ��ų������źŽṹ�Լ��źŲ�������ԭ�͡�
8
9 extern int SWAP_DEV; // �ڴ�ҳ�潻���豸�š�������mm/memory.c�ļ��У���36�С�
10
// �ӽ����豸�����д���������ڴ�ҳ�档ll_rw_page()������blk_drv/ll_rw_block.c�ļ��С�
// ����nr�����ڴ�����ҳ��ţ�buffer�Ƕ�/д��������
11 #define read_swap_page(nr,buffer) ll_rw_page(READ,SWAP_DEV,(nr),(buffer));
12 #define write_swap_page(nr,buffer) ll_rw_page(WRITE,SWAP_DEV,(nr),(buffer));
13
// �����ڴ�����ȡ��������ҳ�档����Ѿ�û�п����ڴ��ˣ���0��
14 extern unsigned long get_free_page(void);
// ��һ�������Ĺ��������ڴ�ҳ��ӳ�䵽���Ե�ַ�ռ�ָ��������put_page()������ȫһ����
15 extern unsigned long put_dirty_page(unsigned long page,unsigned long address);
//�ͷ�������ַaddr��ʼ��1ҳ���ڴ档
16 extern void free_page(unsigned long addr);
17 void swap_free(int page_nr);
18 void swap_in(unsigned long *table_ptr);
19
//// ��ʾ�ڴ������������Ϣ�����˳���
// ���溯����ǰ�Ĺؼ���volatile���ڸ��߱�����gcc�ú������᷵�ء���������gcc��������
// һЩ�Ĵ��룬����Ҫ����ʹ������ؼ��ֿ��Ա������ijЩ��δ��ʼ�������ģ��پ�����Ϣ��
20 extern inline volatile void oom(void)
21 {
// do_exit()Ӧ��ʹ���˳����룬���������ź�ֵSIGSEGV(11) ��ֵͬ�ij����뺬���ǡ���Դ
// ��ʱ�����á�������ͬ�塣
22 printk("out of memory\n\r");
23 do_exit(SIGSEGV);
24 }
25
// ˢ��ҳ�任���ٻ���꺯����
// Ϊ����ߵ�ַת����Ч�ʣ�CPU�����ʹ�õ�ҳ�����ݴ����оƬ�и��ٻ����С����Ĺ�
// ҳ����Ϣ֮����Ҫˢ�¸û������� ����ʹ�����¼���ҳĿ¼��ַ�Ĵ���cr3 �ķ�����
// ����ˢ�¡�����eax = 0����ҳĿ¼�Ļ�ַ��
26 #define invalidate() \
27 __asm__("movl %%eax,%%cr3"::"a" (0))
28
29 /* these are not to be changed without changing head.s etc */
/* ���涨������Ҫ�Ķ�������Ҫ��head.s���ļ��е������Ϣһ��ı� */
// Linux 0.12�ں�Ĭ��֧�ֵ�����ڴ�������16MB����������Щ�������ʺϸ�����ڴ档
30 #define LOW_MEM 0x100000 // ���������ڴ�Ͷˣ�1MB����
31 extern unsigned long HIGH_MEMORY; // ���ʵ�������ڴ���߶˵�ַ��
32 #define PAGING_MEMORY (15*1024*1024) // ��ҳ�ڴ�15MB�����ڴ������15M��
33 #define PAGING_PAGES (PAGING_MEMORY>>12) // ��ҳ��������ڴ�ҳ������3840����
34 #define MAP_NR(addr) (((addr)-LOW_MEM)>>12) // ָ���ڴ��ַӳ��Ϊҳ��š�
35 #define USED 100 // ҳ�汻ռ�ñ�־���μ�449�С�
36
// �ڴ�ӳ���ֽ�ͼ��1�ֽڴ���1ҳ�ڴ棩��ÿ��ҳ���Ӧ���ֽ����ڱ�־ҳ�浱ǰ������
// ��ռ�ã���������������ӳ��15Mb���ڴ�ռ䡣�ڳ�ʼ������mem_init()�У����ڲ�
// ���������ڴ���ҳ���λ�þ���Ԥ�ȱ����ó�USED��100����
37 extern unsigned char mem_map [ PAGING_PAGES ];
38
// ���涨��ķ��ų�����ӦҳĿ¼�����ҳ��������ҳ�������е�һЩ��־λ��
39 #define PAGE_DIRTY 0x40 // λ6��ҳ���ࣨ���ģ���
40 #define PAGE_ACCESSED 0x20 // λ5��ҳ�汻���ʹ���
41 #define PAGE_USER 0x04 // λ2��ҳ�����ڣ�1-�û���0-�����û���
42 #define PAGE_RW 0x02 // λ1����дȨ��1�Cд��0�C����
43 #define PAGE_PRESENT 0x01 // λ0��ҳ����ڣ�1-���ڣ�0-�����ڡ�
44
45 #endif
46