博文

目前显示的是标签为“Reading notes”的博文

设备控制器,设备驱动程序,文件系统

图片
首先当用户进程发出输入输出时,系统把请求处理的权限放在文件系统,文件系统通过驱动程序提供的接口将任务下放到驱动程序,驱动程序根据需要对设备控制器进行操作,设备控制器再去控制设备本身。 设备控制器 对设备本身的控制是电器工程师所关心的事情. 设备驱动程序 是一组相关函数的集合。它包含设备服务子程序和中断处理程序。设备服务子程序包含了所有与设备相关的代码,每个设备服务子程序只处理一种设备或者紧密相关的设备。其功能就是从与设备无关的软件中接受抽象的命令并执行之。当执行一条请求时,具体操作是根据控制器对驱动程序提供的接口(指的是控制器中的各种寄存器),并利用中断机制去调用中断服务子程序配合设备来完成这个请求。 设备驱动程序利用结构 file_operations 与 文件系统 联系起来,即设备的各种操作的入口函数存在file_operation中。对于特定的设备来说有一些操作是不必要的,其入口置为NULL。

关于系统调用

在linux下每个系统调用由两部分组成: (1):核心函数:是实现系统调用功能的代码,作为操作系统的核心驻留在内存中,是一种共享代码。运行在核心态。 (2):接口函数:是提供给应用程序的API,以库函数的形式存在于linux的lib.a中,该库中存放了所有系统调用的接口函数的目标代码,用汇编语言书写。其主要功能是把系统调用号,入口参数地址传给相应的核心函数,并使用户态下运行的应用程序陷入核心态。 以下转自:http://hi.baidu.com/cwt0408/blog/item/fd53924c19d5a8f1d62afcea.html 系统调用和普通库函数调用: linux内核中设置了一组用于实现系统功能的子程序,成为系统调用。系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,运行于用户态。 如何工作: 一般的,进程是不能访问内核的。它不能访问内核所占内存空间也不能调用内核函数。CPU硬件决定了这些(这就是为什么它被称作"保护模式")。系统调用是这些规则的一个例外。其原理是进程先用适当的值填充寄存器,然后调用一个特殊的指令,这个指令会跳到一个事先定义的内核中的一个位置(当然,这个位置是用户进程可读但是不可写的)。在Intel CPU中,这个由中断0x80实现。硬件知道一旦你跳到这个位置,你就不是在限制模式下运行的用户,而是作为操作系统的内核--所以你就可以为所欲为。 进程可以跳转到的内核位置叫做sysem_call。这个过程检查系统调用号,这个号码告诉内核进程请求哪种服务。然后,它查看系统调用表 (sys_call_table)找到所调用的内核函数入口地址。接着,就调用函数,等返回后,做一些系统检查,最后返回到进程(或到其他进程,如果这个进程时间用尽)。如果你希望读这段代码,它在<内核源码目录>/kernel/entry.S,Entry(system_call)的下一行。 什么是errno: 为防止和正常的返回值混淆,系统调用并不直接返回错误码,而是将错误码放入一个名为errno的全局变量中。如果一个系统调用失败,你可以读出errno的值来确定问题所在。 errno不同数值所代表的错误消息定义在errno.h中,你也可以通过命令"man 3 errno...

Xen体系结构

图片
转自: http://www.lupaworld.com/386879/viewspace-139248.html 本文档描述的是Xen hypervisor的宏观体系结构、辅助工具以及构建一个完整虚拟化环境所需的应用程序。本文的综合介绍了基于Xen3.2(2008年1月)的Xen体系结构,更详尽的描述请参考Xen books。 Xen组成要素 一个Xen虚拟化环境由以下相互配合的元素构成: Xen Hypervisor Domain 0 Domain管理和控制工具 Domain U PV客户系统 Domain U HVM客户系统 下面的图形是对这些要素基本组织的描述 Xen Hypervisor Xen Hypervisor是一个介于硬件和操作系统之间的软件层,它负责在各虚拟机之间进行CPU调度和内存分配(partitioning)。Xen Hypervisor不仅抽象出硬件层,同时控制虚拟机的执行,因为这些虚拟机共享同一个处理环境。Xen Hypervisor不会处理网络、存储设备、视频以及其他I/O。 Domain 0 Domain 0是一个修改过的Linux kernel,是唯一运行在Xen Hypervisor之上的虚拟机,它拥有访问物理I/O资源的权限,同时和系统上运行的其他虚拟机进行交互。Domain 0需要在其它Domain启动之前启动。 Domain 0中包含两个驱动:Network Backend Driver和Block Backend Driver,分别负责处理来自Domain U的网络和本地磁盘请求。Network Backend Driver直接和本地网络硬件进行通信以处理所有来自Domain U上客户操作系统的网络请求。Block Backend Driver和本地存储设备进行通信以处理来自Domain U的读写请求。 Domain U 运行在Xen Hypervisor上的所有半虚拟化(paravirtualized)虚拟机被称为“Domain U PV Guests”,其上运行着被修改过内核的操作系统,如Linux、Solaris、FreeBSD等其它UNIX操作系统。所有的全虚拟化虚拟机被称为“Domain U HVM Guests”,其上运行着不用修改内核的操作系统,如Windows等。 Domain U PV Guests的...

笔记

图片
第二代手机以DSP为核心。共包括3个部分: 射频芯片组 (Radio Subsystem)。它负责调制-发送/接收-解调无线信号。无论是发送还是接收,射频芯片组只处理模拟信号。 模拟基带芯片组 (Analog Baseband)。射频接口(RF Interface)---负责数/模转换,以及音频接口(Audio Interface)---音频的模数转换。 数字基带芯片组 (Digital Baseband)。 数字信号处理器(DSP) --- 要任务是进行语音处理,例如去除噪音和语音矫正等等。此外DSP还负责,对语音数据流的压缩解压,不同格式之间的编码解码和转换,还有加密解密等等。如果单块DSP芯片的功能不够,还可以借助于其它专用芯片(ASIC) 。 微控制器(Microcontroller) --- 1. 处理无线通信协议,2. 运行手机操作系统---例如Nucleus RTOS,负责处理如何开机/关机/锁机,屏幕显示,音量控制,响铃与震动等等外围动作。此外,还负责手机各个功能模块的运行调度 (Scheduling),以及不同进程间的数据交换(IPC)。虽然DSP在手机中的地位非常重要,但是DSP仍然接受手机操作系统的控制。 七号信令图

Microkernel和VMM的比较

转自:http://hi.baidu.com/l4os/blog/item/a4f66600d3af0681e850cd57.html      这是来自HP的关于Xen和L4之间关系评价的一篇Paper,最早看到这篇Paper的一些Note,是来自Peking University的 Andy Yang( 这里) ,觉得意犹未尽,找原文来看。(这是第一篇,描述VMM > Microkernel)。     虽然在这篇Paper里面,作者声称是Microkernel和VMM的比较,但是现在说Microkernel,几乎就等同于L4,因为现在唯一保持活力还在不断前进的Microkernel似乎也只有L4了。同样的,VMM的代名词就是Xen,而且,作者也是来自Xen小组,所以我是从一种Xen VS L4的角度来看待这篇Paper的。     研究动机: 首 先,Microkernel是一种OS,而且最初的Mach是基于裁减UNIX的角度来出发的,而裁减的最后发现只有IPC是不能裁减掉的,所以在 Paper中有了Communication Oriented的提法,而Microkernel的研究者们对于IPC Performance的研究投入了极大的精力,当然也出了很多的Paper。所以似乎Microkernel是从软件到硬件的设计过程。而VMM的初衷 是需要运行多个OS,因此它提供了一个Layer,可以把硬件资源进行严格的分离,而多个OS之间如何通讯他们不做考虑。       至于Paper中所提高的Performance问题,不是VMM和Microkernel的关键区别,因为Xen自称可以可以为Guest OS提供极小的Performance Loss,但是同样OKL4则声称自己的OKL4Linux ARM与Native Linux的性能差距小于1%。因此,出发点是不同的。Microkernel仍然是在设计OS,而VMM抛开OS,目的是作一个Hardware Multiplexer。     系统架构:     Avoid Liability Inversion    从架构图上看,VMM和Microkernel几乎没有区别,上面有多个Guest OS,下面是一个Layer,VMM = Microkernel。作者用了一个liabilit...

XENArm

图片
Secure Xen on ARM is an ARM port of the x86 version of Xen-3.0.2-2 plus security features in Xen. It allows the simultaneous execution of multiple operating systems and their legacy application software stacks on a single ARM core-based system-on-chip. Each guest OS instance runs in their own OS partition called "domain" and the OS partitions are securely isolated from each other. The original Xen solution comes with many user-land utilities. We have ported most core component such as xend, xenstore, xm and xenconsole. Notes: The current version of Secure Xen on ARM only supports "static partitioning" of system memory, which means that the number of guest domains and the amount of memory allocated to the guest domains is fixed at compile time. You have to configure system memory partitioning properly before building Secure Xen on ARM. The shadow page table and the writable page table are not included in this release but we are working on them so hopefully they will ...

笔记

QEMU uses SDL for it’s output (video as well as sound), and you need to run QEMU in an X Window session. There is an option to the qemu binary called -nographic that you can use to circumvent the X session requirement, but you still need the X and SDL libraries installed on your system. Typically, you would use -nographic for a virtual machine you’ve already installed previously, and that allows remote access through SSH, VNC or XDMP, and where you no longer need the virtual machine’s local console. FrameBuffer的原理   FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。   Linux是工作在保护模式下,所以 用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏 , Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏 。Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。       但Framebuffer本身不具备任何运算数据的能力,就只好比是一个暂时存放水的水池.CPU将运算后的结果放到这个水池,水池再将结果流到显示器.中间不会对数据做处理. 应用程序也可以直接读写这个水池的内容.在这种机制下,尽管Framebuffer需要真正的显卡驱动的支持,但所...

笔记

TUN/TAP:是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行与操作系统上的软件提供与硬件的网络设备完全相同的功能。 TUN:等同于一个以太网设备,它操作第二层数据包如以太网数据帧 TAP:模拟了网络层设备,操作第三层数据包比如IP数据封包 操作系统 通过TUN/TAP设备向 绑定该设备的用户空间的程序 发送数据,反之, 用户空间的程序 也可以像操作硬件网络设备那样,通过TNU/TAP设备发送数据。在后种情况下,TUN/TAP设备向 操作系统的网络栈 投递(或“注入”)数据包,从而模拟从外部接受数据的过程。   ------ 基于优先级抢占式调度 :系统中每个任务都有一个优先级,内核总是将CPU分配给处于就绪态的优先级最高的任务运行。如果系统发现就绪队列中有比当前运行任务更高的优先级任务,就把当前运行任务置于就绪队列中,调入高优先级任务运行。系统采用优先级抢占方式进行调度,可以保证重要的突发事件及时得到处理。

读书笔记

图片
嵌入式BootLoader技术内幕: 嵌入式系统从软件层次上包括4个部分: 1. 引导加载程序。 包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 2. Linux 内核。 特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。 包括根文件系统和建立于 Flash 内存设备之上文件系统。通常用 ram disk 来作为 root fs。 4. 用户应用程序。 特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:MicroWindows 和 MiniGUI 懂。     引导加载程序是系统加电后运行的第一段软件代码. 以PC机为例,PC 机中的引导加载程序由 BIOS(其本质就是一段固件程序)和位于硬盘MBR(Main Boot Record 主引导记录--位于硬盘第一个分区第一个个扇区前512个字节)中的OS Boot Loader(比如,LILO和GRUB等)一起组成。BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的Boot Loader读到系统的RAM 中,然后将控制权交给OS Boot Loader。OS Boot Loader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。 而在嵌入式系统中,通常并没有像BIOS 那样的固件程序(注,有的嵌入式 CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由Boot Loader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000 处开始执行,而在这个地址处安排的通常就是系统的Boot Loader程序。 Boot Loader 的 stage1 通常包括以下步骤(以执行的先后顺序): 硬件设备初始化。 为加载Boot Loader的stage2准备RAM 空间。 拷贝Boot Loader的stage2 到RAM 空间中。 设置好堆栈。 --为stage2执行C语言代码作好准备 跳转到 stage2的C入口点。 Boot Loader的stage2 通常包括以下步骤(以执行的先后顺序): 初始化本阶段要使用...

what is virtualization?[翻译手稿]

图片
版权归: www.virtuallogix.com VirtualLogix VLX real-time virtualization technology VirtualLogix real-time virtualization technology enables multiple Operating Systems, named guest OS's, to run simultaneously on the same single-core or multi-core processor. The guest OS's are independent from each other, but can cooperate via efficient communication mechanisms. VirtualLogix 实时虚拟化技术能够使多个guset操作系统同时运行在单核或者多核处理器上。Guest操作系统之间相互独立,但能够通过有效的沟通机制进行合作。 IBM has pioneered virtualization in the server virtualization space in the 1960's. The architecture and design choices required by the embedded and real-time focus of VirtualLogix VLX virtualization technology have led to a different approach. IBM公司自上世纪60年代起,就引领了服务器虚拟化领域的潮流。集中于嵌入式和实时系统的VirtualLogix VLX虚拟化技术所带来的体系结构和设计则引领了另一个虚拟化的潮流。 A thin abstraction layer, named VLX Virtualizer, manages key system resources to isolate the guest OS's from the underlying hardware. More precisely, VirtualLogix VLX virtualization technology relies ...

编译原理学习

今天学习了DFA  NFA 以及 化简 感觉收获不小。