当前搜索:

Android培训班(116)内核的空闲进程

系统已经完成了整个初始化过程,那么这个初始化进程最好的归宿是那里呢?显然它就是进化为一个空闲进程,当系统没有其它任务处理时,就会通过进程管理器选择这个优先级最低,没有什么事情做的任务,以便整个CPU还有事情可做。也许你也会问,为什么一定要一个空闲进程,不要这个进程不行吗?肯定回答是不行的,整个系统里的CPU资源总需要使用的,如果不使用CPU资源,那么这个CPU就意味着不再执行指令了,CPU就已经停...
阅读(2781) 评论(0)

Android培训班(115)内核最后初始化的函数rest_init

在上面已经对基本的硬件、系统的结构初始化完成,接着下来系统要做的工作,就是创建进程,对进程进行管理,才可以让系统生生不息,处理各种各样的任务。虽然大部份的初始化工作已经完成,但还需要更进一步初始化,因此创建一个内核初始化线程来继续初始化。为了有一个干净,又可以拷贝,又方便创建线程的方法,就是创建一个特别的内核线程kthreadd,这样所有以后需要创建的线程都是由这个线程创建出来的,可以说这个线程为...
阅读(2788) 评论(0)

Android培训班(114)start_kernel函数11

#ifdefCONFIG_PROC_FS proc_root_init();#endif这个函数是初始化系统进程文件系统,主要提供内核与用户进行交互的平台,方便用户实时查看进程的信息。cgroup_init();这个函数是初始化进程控制组,主要用来为进程和其子程提供性能控制。比如限定这组进程的CPU使用率为20%。 cpuset_init();这个函数是初始化CPUSET,CPUSET主要为控制...
阅读(1942) 评论(0)

Android培训班(113)start_kernel函数10

numa_policy_init();这个函数是初始化NUMA的内存访问策略。所谓NUMA,它是NonUniform Memory AccessAchitecture的缩写,主要用来提高多个CPU访问内存的速度。因为多个CPU访问同一个节点的内存速度远远比访问多个节点的速度来得快。if(late_time_init) late_time_init();这段代码是主要运行时钟相关后期的初始化功能。c...
阅读(2062) 评论(0)

Android培训班(112)start_kernel函数9

page_cgroup_init();这个函数是容器组的页面内存分配。mem_init();这个函数是标记那些内存可以使用,并且告诉系统有多少内存可以使用,当然是除了内核使用的内存以外。 enable_debug_pagealloc();这个函数是设置内存分配是否需要输出调试信息,如果调用这个函数,当分配内存时,不会输出一些相关的信息。cpu_hotplug_init();这个函数是初始化CPU热...
阅读(1999) 评论(0)

Android培训班(111)start_kernel函数8

/** HACK ALERT! This is early. We're enabling the console before* we've done PCI setups etc, and console_init() must be aware of* this. But we do want output early, in case something goes wrong.*/cons...
阅读(1938) 评论(0)

Android培训班(110)start_kernel函数7

parse_args("Bootingkernel", static_command_line, __start___param, __stop___param - __start___param, &unknown_bootoption); 这行代码主要对传入内核参数进行解释,如果不能识别的命令就调用最后参数的函数。if(!irqs_disabled()) { printk(KERN_...
阅读(2117) 评论(0)

Android培训班(109)start_kernel函数6

setup_command_line(command_line)这个函数主要作用是保存命令行,以便后面可以使用。unwind_setup()这个函数主要作用是对调用栈的调试功能进一步初始化。在ARM系统里是空函数。setup_per_cpu_areas()这个函数主要作用是设置SMP体系每个CPU使用的内存空间,同时拷贝初始化段里数据。setup_nr_cpu_ids()这个函数主要作用是设置最多...
阅读(2114) 评论(1)

Android培训班(108)start_kernel函数5

tick_init()这个函数主要作用是初始化时钟事件管理器的回调函数,比如当时钟设备添加时处理。在内核里定义了时钟事件管理器,主要用来管理所有需要周期性地执行任务的设备。boot_cpu_init()这个函数主要作用是设置当前引导系统的CPU在物理上存在,在逻辑上可以使用,并且初始化准备好。在多CPU的系统里,内核需要管理多个CPU,那么就需要知道系统有多少个CPU,在内核里使用cpu_pres...
阅读(2426) 评论(0)

Android培训班(107)start_kernel函数4

cgroup_init_early()这个函数主要作用是控制组进行早期的初始化。什么叫控制组(controlgroups)呢?简单地说,控制组就是定义一组进程具有相同资源的占有程度。比如可以指定一组进程使用CPU为30%,磁盘IO为40%,网络带宽为50%。因此通过控制组就可以把所有进程分配不同的资源。可以参考这个文档(http://docs.redhat.com/docs/en-US/Red_H...
阅读(2374) 评论(0)

Android培训班(106)start_kernel函数3

unwind_init()这个函数主要作用是提供调试和错误的初始化。由于内核是基于C语言开发的系统,而C语言是基于栈的函数调用语言,那么当函数出错时,软件开发工程师就逼切地想知道是从那里调用这个函数出错的,也就是想获取函数调用的路径,以便确认这条路径里是否考虑到的情况,如果没有考虑周到,说明就有错误出现了。如果系统提供这种查看函数调用栈的关系,那么会大大方便软件开发工程师对软件修改,提高质量。调用...
阅读(2752) 评论(0)

Android培训班(105)start_kernel函数2

紧跟参数后面的,就是调用函数smp_setup_processor_id()了,这个函数主要作用是获取当前正在执行初始化的处理器ID。如果仔细地阅读完初始化函数start_kernel,就会发现里面还有调用smp_processor_id()函数,这两个函数都是获取多处理器的ID,为什么会需要两个函数呢?其实这里有一个差别的,smp_setup_processor_id()函数可以不调用setup...
阅读(3307) 评论(0)

Android培训班(104)start_kernel函数1

经历了跟体系结构密切相关的汇编代码之后,就可以进入C语言编写的结构无关的代码了。这个入口的函数是start_kernel函数,它主要更进一步地初始化系统相关的内容,以便系统进入一种服务状态,提供一种虚拟机的服务,提供各种API调用的服务。在start_kernel函数里,需要非常注意的是里面初始化函数的顺序,这些初始化函数不能随便调换初始化顺序,否则就会导致系统运行出错。由于这个函数的内容非常多,...
阅读(2977) 评论(4)

Android培训班(103)内核入口汇编3

从前面可知由CPU的初始化函数里把MMU相关寄存器的值保存到r0寄存器,这样就传送给函数__enable_mmu,以便设置到MMU的寄存器里。函数__enable_mmu的代码如下:__enable_mmu: #ifdefCONFIG_ALIGNMENT_TRAP orr r0, r0, #CR_A #else bic r0, r0, #CR_A #endif #ifdefCONFIG_CPU...
阅读(2028) 评论(0)

Android培训班(102)内核入口汇编2

从前面的入口函数可知,内核进入时并没有知道自己到底运行在什么样的CPU里,因此就没有办法知道自己到底调用那个函数来初始化,或者用什么来做正确的工作。为了解决这个问题,就会调用__lookup_processor_type函数来查找CPU的类型。在这个函数里主要是通过预先填写CPUID的信息,跟目前获取到CPUID进行比较,如果能从预先定义的数组里找到一样的CPUID,说明就找到合适的初始化函数了。...
阅读(2035) 评论(0)
116条 共8页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:5898512次
    • 积分:76237
    • 等级:
    • 排名:第22名
    • 原创:1624篇
    • 转载:61篇
    • 译文:11篇
    • 评论:2102条
    文章存档