摘要:
一 用户空间和内核空间Linux内核将这4G字节虚拟地址空间的空间分为两部分: l 将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”。 l 将较低的3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间)。 因为每个进程可以通过系统调用进入内核,因此Linux内核由系统内的所有进程共享。于是从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间。如此划分提供对系统内核安全保护机制。二 系统调用 用户空间的进程和内核空间程序如何进行交互?——系统调用 l 为用户空间提供统一的抽象接口... 阅读全文
摘要:
进程调度: 在可运行态进程之间分配有限处理器时间资源的内核子系统。一 调度策略1 进程类型 I/O消耗型进程:大部分时间用来提交I/O请求或是等待I/O请求,经常处于可运行状态,但运行时间短,等待请求过程时处于阻塞状态。如交互式程序。 处理器消耗型进程:时间大都用在执行代码上,除非被抢占否则一直不停的运行。 综合型:既是I/O消耗型又是处理器消耗型。 调度策略要在:进程响应迅速(响应时间短)和最大系统利用率(高吞吐量)之间寻找平衡。2 调度概念 优先级:基于进程价值和对处理器时间需求进行进程分级的调度。 时间片:表明进程被抢占前所能持续运行的时间,规定一个默认的时间片。时间片过长导致系统交互性 阅读全文
摘要:
一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源。 线程是进程中活动的对象,每个线程都拥有独立的程序计数器、进程栈和一组进程寄存器。 内核调度的对象是线程而不是进程。对Linux而言,线程是特殊的进程。二 进程描述符及任务结构 内核使用双向循环链表的任务队列来存放进程,使用结构体task_struct来描述进程所有信息。1 进程描述符task_struct struct task_struct {}结构体相当大,大约1.7K字节。大概列出一些看看: 2 分配进程描述符 当进程由于中断或系统调用从用户态转换到内核态时,进程所使用的栈也要从用户栈切换到内核栈... 阅读全文
摘要:
内核与操作系统: 内核是操作系统的核心部分,包含了系统运行的核心过程,决定系统的性能,操作系统启动内核被装入到RAM中;操作系统与底层硬件设备交互和为运行应用程序提供执行环境。Linux内核与微内核比较: 微内核:内核只需要一个很小的函数集,通常包括几个同步原语,一个简单的调度程序和进程间通信机制。运行在微内核之上的几个系统进程实现系统级功能:内存分配,设备驱动程序……完全的模块化进程。任何操作系统层都是独立的程序模块,通过模块化的方法定义明确清晰的软件接口与其它层交互。内核中暂且不需要执行的系统进程可以被调出或者撤销。微内核便于移植和充分利用RAM,但开销大效率是个问题。 宏内核:Lin.. 阅读全文
摘要:
转载:http://www.ibm.com/developerworks/cn/linux/l-async/AIO 简介 Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性,但是我们在 2.4 版本内核的补丁中也可以找到它。AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果。I/O 模型在深入介绍 AIO API 之前,让我们先来探索一下 Linux 上可以使用的不同 I/O 模型。这并不是一个详尽的介绍,但是我们将试图介绍. 阅读全文
摘要:
java多线程设计wait、notify、notifyall、synchronized的使用机制wait、notify、notifyall、synchronized的使用机制:synchronized(obj) { while(!condition) { obj.wait(); } obj.doSomething();}当线程A获得了obj锁后,发现条件condition不满足,无法继续下一处理,于是线程A就wait() , 放弃对象锁.之后在另一线程B中,如果B更改了某些条件,使得线程A的condition条件满足了,就可以唤醒线程A:synchronized(obj) { c... 阅读全文
摘要:
Zygote 接收客户端创建进程的请求,使用JNI调用linux fork函数创建进程。Zygote是在Init进程中作为Service被启动的。Zygote进程的主体是:ZygoteInit。 Zygote进程的启动可以参考前篇:Android系统启动过程 http://www.cnblogs.com/bastard/archive/2012/08/28/2660389.html系统启动过程如下图: 下面主要看看Zygote是如何进行工作的。一 Zygote工作流程主函数:public static void main(String argv[]) { …… /... 阅读全文
摘要:
简单点讲, 没有Windows安装盘的朋友准备的,使用MBRFix工具进行修复。先进入cmd命令窗口,然后进入mbrfix工具所在的目录(用cd命令),输入命令 MbrFix /drive 0 fixmbr ,再确认一下。重启以后你会发现,没有了Linux,直接可以进入Windows了。删除Linux分区:可以用系统自带的 磁盘管理 工具删除,也可以使用 pm 工具。pm工具网上下载此方法简单可行推荐:具体方法1:Win7与Ubuntu双系统时卸载Ubuntu的方法1. 下载MBRFix工具,放在c盘,利用命令提示符,进入软件所在目录,cd c:\mbrfix (cd后面一个空格)2.输入 . 阅读全文
摘要:
linux中fork()函数详解(原创!!实例讲解)(转载)一、fork入门知识一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。 我们来看一个例子:[cpp]view plaincopy/**fork_test.c*version1*Createdon:20 阅读全文
摘要:
Android系统启动过程首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰) Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用。启动的过程如下图所示:(图片来自网上,后面有地址) 下面将从Android4.0源码中,和网络达人对此的总结中,对此过程加以学习了解和总结,以下学习过程中代码片段中均有省略不完整,请参照源码。一 Init进程的启动 init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完... 阅读全文