您的位置: 飞扬精品软件园 >> 文章中心 >> 系统教程 >> Linux系统 >> 僵尸进程及其避免方法

相关文章链接

最新新闻资讯

    僵尸进程及其避免方法

    僵尸进程及其避免方法


    • 阅览次数: 文章来源: 原文作者: 整理日期: 2010-07-12


    14、新增对/proc的访问操作

      以前的/proc中只能得到string, seq_file操作能得到如long等多种数据。

      相关函数:

      static struct seq_operations 必须实现这个类似file_operations得数据中得各个成员函数。

      seq_printf();

      int seq_putc(struct seq_file *m, char c);

      int seq_puts(struct seq_file *m, const char *s);

      int seq_escape(struct seq_file *m, const char *s, const char *esc);

      int seq_path(struct seq_file *m, struct vfsmount *mnt,

      struct dentry *dentry, char *esc);

      seq_open(file, &ct_seq_ops);

      等等

      15、底层内存分配

      1、头文件改为

      2、分配标志GFP_BUFFER被取消,取而代之的是GFP_NOIO 和 GFP_NOFS

      3、新增__GFP_REPEAT,__GFP_NOFAIL,__GFP_NORETRY分配标志

      4、页面分配函数alloc_pages(),get_free_page()被包含在中

      5、对NUMA系统新增了几个函数:

      a) struct page *alloc_pages_node(int node_id,

      unsigned int gfp_mask,

      unsigned int order);

      b) void free_hot_page(struct page *page);

      c) void free_cold_page(struct page *page);

      6、新增Memory pools

      mempool_t *mempool_create(int min_nr,

      mempool_alloc_t *alloc_fn,

      mempool_free_t *free_fn,

      void *pool_data);

      void *mempool_alloc(mempool_t *pool, int gfp_mask);

      void mempool_free(void *element, mempool_t *pool);

      int mempool_resize(mempool_t *pool, int new_min_nr, int gfp_mask);

      16、per-CPU变量

      get_cpu_var();

      put_cpu_var();

      void *alloc_percpu(type);

      void free_percpu(const void *);

      per_cpu_ptr(void *ptr, int cpu)

      get_cpu_ptr(ptr)

      put_cpu_ptr(ptr)

      老版本使用

      DEFINE_PER_CPU(type, name);

      EXPORT_PER_CPU_SYMBOL(name);

      EXPORT_PER_CPU_SYMBOL_GPL(name);

      DECLARE_PER_CPU(type, name);

      DEFINE_PER_CPU(int, mypcint);

      2.6内核采用了可剥夺得调度方式这些宏都不安全

      17、内核时间变化

      1、现在的各个平台的HZ为

      Alpha: 1024/1200; arm: 100/128/200/1000; CRIS: 100; i386: 1000; IA-64: 1024; M68K: 100; M68K-nommu: 50-1000; MIPS: 100/128/1000; MIPS64: 100; PA-RISC: 100/1000; PowerPC32: 100; PowerPC64: 1000; S/390: 100; SPARC32: 100; SPARC64: 100; SuperH: 100/1000; UML: 100; v850: 24-100; x86-64: 1000.

      2、由于HZ的变化,原来的jiffies计数器很快就溢出了,引入了新的计数器jiffies_64

      3、#i nclude

      u64 my_time = get_jiffies_64();

      4、新的时间结构增加了纳秒成员变量

      struct timespec current_kernel_time(void);

      5、他的timer函数没变,新增

      void add_timer_on(struct timer_list *timer, int cpu);

      6、新增纳秒级延时函数

      ndelay();

      7、POSIX clocks 参考kernel/posix-timers.c

      18、工作队列(workqueue)

      1、任务队列(task queue )接口函数都被取消,新增了workqueue接口函数

      struct workqueue_struct *create_workqueue(const char *name);

      DECLARE_WORK(name, void (*function)(void *), void *data);

      INIT_WORK(struct work_struct *work,

      void (*function)(void *), void *data);

      PREPARE_WORK(struct work_struct *work,

      void (*function)(void *), void *data);

      2、申明struct work_struct结构

      int queue_work(struct workqueue_struct *queue,

      struct work_struct *work);

      int queue_delayed_work(struct workqueue_struct *queue,

      struct work_struct *work,

      unsigned long delay);

      int cancel_delayed_work(struct work_struct *work);

      void flush_workqueue(struct workqueue_struct *queue);

      void destroy_workqueue(struct workqueue_struct *queue);

      int schedule_work(struct work_struct *work);

      int schedule_delayed_work(struct work_struct *work, unsigned long delay);

      19、新增创建VFS的"libfs"

      libfs给创建一个新的文件系统提供了大量的API.

      主要是对struct file_system_type的实现。

      参考源代码:

      drivers/hotplug/pci_hotplug_core.c

      drivers/usb/core/inode.c

      drivers/oprofile/oprofilefs.c

      fs/ramfs/inode.c

      fs/nfsd/nfsctl.c (simple_fill_super() example)

    [1] [2] [3] [4]


查看所有评论

网友对僵尸进程及其避免方法 的评论

网名:
主题:
内容:
验证码: