����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