精华内容
下载资源
问答
  • 完成发电-输电-配电功能的设备叫做一次设备,如发电机,断路器,电流电压互感器,变压器,避雷器等; 对一次设备进行控制,保护作用的设备叫做二次设备,如继电器,控制开关,指示灯,测量仪表等。 另解: 一次...
    完成发电-输电-配电功能的设备叫做一次设备,如发电机,断路器,电流电压互感器,变压器,避雷器等;
    对一次设备进行控制,保护作用的设备叫做二次设备,如继电器,控制开关,指示灯,测量仪表等。
    另解:
    一次设备通常包含以下五类:
    (1)、能量转换设备(如发电机、变压器、电动机等)
    (2)、开关设备(断路器、熔断器、负荷开关、隔离开关等)
    (3)、载流导体(母线、绝缘子和电缆等)
    (4)、互感器(电压、电流等互感器)
    (5)、电抗器和避雷器(电抗器主要用于限制电路中的短路电流;避雷器则用于限制电气设备的过电压)
    二次设备:对电气一次设备的工作状态进行监测、控制和保护的辅助性电气设备称为二次设备。例如各种电气仪表、继电器、自动控制设备、信号电缆和控制电缆等。
    
    展开全文
  • 当我们往开发板移植了一个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,查看系统/dev目录,往往里面没有或者就只有null、console等几个系统必须的设备文件这儿外,...

    一、什么是Linux设备文件系统

          首先我们不看定义,定义总是太抽象很难理解,我们先看现象。当我们往开发板上移植了一个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,查看系统/dev目录,往往里面没有或者就只有null、console等几个系统必须的设备文件在这儿外,没有任何设备文件了。那我们移植好的各种设备驱动的设备文件怎么没有啊?如果要使用这些设备,那不是要一个一个的去手动的创建这些设备的设备文件节点,这给我们使用设备带来了极为的不便(在之前篇幅中讲的各种设备驱动的移植都是这样)。

          设备文件系统就是给我们解决这一问题的关键,他能够在系统设备初始化时动态的在/dev目录下创建好各种设备的设备文件节点(也就是说,系统启动后/dev目录下就有了各种设备的设备文件,直接就可使用了)。除此之外,他还可以在设备卸载后自动的删除/dev下对应的设备文件节点(这对于一些热插拔设备很有用,插上的时候自动创建,拔掉的时候又自动删除)。还有一个好处就是,在我们编写设备驱动的时候,不必再去为设备指定主设备号,在设备注册时用0来动态的获取可用的主设备号,然后在驱动中来实现创建和销毁设备文件(一般在驱动模块加载和卸载函数中来实现)。


    二、关于udev

           2.4 内核使用devfs(设备文件系统)在设备初始化时创建设备文件,设备驱动程序可以指定设备号、所有者、用户空间等信息,devfs 运行在内核环境中,并有不少缺点:可能出现主/辅设备号不够,命名不灵活,不能指定设备名称等问题。

          而自2.6 内核开始,引入了sysfs 文件系统。sysfs 把连接在系统上的设备和总线组织成一个分级的文件,并提供给用户空间存取使用。udev 运行在用户模式,而非内核中udev 的初始化脚本在系统启动时创建设备节点,并且当插入新设备——加入驱动模块——在sysfs上注册新的数据后,udev会创新新的设备节点

         udev 是一个工作在用户空间的工具,它能根据系统中硬件设备的状态动态的更新设备文件,包括设备文件的创建,删除,权限等。这些文件通常都定义在/dev 目录下,但也可以在配置文件中指定。udev 必须内核中的sysfs和tmpfs支持,sysfs 为udev 提供设备入口和uevent 通道,tmpfs 为udev 设备文件提供存放空间

        注意,udev 是通过对内核产生的设备文件修改,或增加别名的方式来达到自定义设备文件的目的。但是,udev 是用户模式程序,其不会更改内核行为。也就是说,内核仍然会创建sda,sdb等设备文件,而udev可根据设备的唯一信息来区分不同的设备,并产生新的设备文件(或链接)。而在用户的应用中,只要使用新产生的设备文件即可。

        

    三、udev和devfs设备文件的对比

           提到udev,不能不提的就是devfs,下面看一下udev 与 devfs 的区别:

    1、udev能够实现所有devfs实现的功能。但udev运行在用户模式中,而devfs运行在内核中

    2、当一个并不存在的 /dev 节点被打开的时候, devfs一样自动加载驱动程序而udev确不能。udev设计时,是在设备被发现的时候加载模块,而不是当它被访问的时候。 devfs这个功能对于一个配置正确的计算机是多余的。系统中所有的设备都应该产生hotplug 事件、加载恰当的驱动,而 udev 将会注意到这点并且为它创建对应的设备节点。如果你不想让所有的设备驱动停留在内存之中,应该使用其它东西来 管理你的模块 (如脚本, modules.conf, 等等) 。其中devfs 用的方法导致了大量无用的 modprobe 尝试,以此程序探测设备是否存在。每个试探性探测都新建一个运行 modprobe 的进程,而几乎所有这些都是无用的

    3、udev是通过对内核产生的设备名增加别名的方式来达到上述目的的。前面说过,udev是用户模式程序,不会更改内核的行为

           因此,内核依然会我行我素地产生设备名如sda,sdb等。但是,udev可以根据设备的其他信息如总线(bus),生产商(vendor)等不同来区分不同的设备,并产生设备文件。udev只要为这个设备文件取一个固定的文件名就可以解决这个问题。在后续对设备的操作中,只要引用新的设备名就可以了。但为了保证最大限度的兼容,一般来说,
    新设备名总是作为一个对内核自动产生的设备名的符号链接(link)来使用的。

         例如:内核产生了sda设备名,而根据信息,这个设备对应于是我的内置硬盘,那我就可以制定udev规则,让udev除了产生/dev/sda设备文件 外,另外创建一个符号链接叫/dev/internalHD。这样,我在fstab文件中,就可以用/dev/internalHD来代替原来的 /dev/sda了。下次,由于某些原因,这个硬盘在内核中变成了sdb设备名了,那也不用着急,udev还会自动产生/dev/internalHD这 个链接,并指向正确的/dev/sdb设备。所有其他的文件像fstab等都不用修改。

        而在在2.6内核以前一直使用的是 devfs,devfs挂载于/dev目录下,提供了一种类似于文件的方法来管理位于/dev目录下的所有设备,但是devfs文件系统有一些缺点,例 如:不确定的设备映射,有时一个设备映射的设备文件可能不同,例如我的U盘可能对应sda有可能对应sdb 。


    四、udev 的工作流程图

           下面先看一张流程图:


            前面提到设备文件系统udev的工作过程依赖于sysfs文件系统udev文件系统在用户空间工作,它可以根据sysfs文件系统导出的信息(设备号(dev)等),动态建立和删除设备文件

            sysfs文件系统特点:sysfs把连接在系统上的设备和总线组织成为一个分级的目录及文件,它们可以由用户空间存取,向用户空间导出内核数据结构以及它们的属性,这其中就包括设备的主次设备号

           

          那么udev 是如何建立设备文件的呢?

    a -- 对于已经编入内核的驱动程序

       当被内核检测到的时候,会直接在 sysfs 中注册其对象;对于编译成模块的驱动程序,当模块载入的时候才会这样做。一旦挂载了 sysfs 文件系统(挂载到 /sys),内建的驱动程序在 sysfs 注册的数据就可以被用户空间的进程使用,并提供给 udev 以创建设备节点

        udev 初始化脚本负责在 Linux 启动的时候创建设备节点,该脚本首先将 /sbin/udevsend 注册为热插拔事件处理程序。热插拔事件本不应该在这个阶段发生,注册 udev 只是为了以防万一。

       然后 udevstart 遍历 /sys 文件系统(其属性文件dev中记录这设备的主设备号,与次设备号),并在 /dev 目录下创建符合描述的设备文件。

      例如,/sys/class/tty/vcs/dev 里含有"7:0"字符串,udevstart 就根据这个字符串创建主设备号为 7 、次设备号为 0 的 /dev/vcs 设备。udevstart 创建的每个设备的名字和权限由 /etc/udev/rules.d/ 目录下的文件指定的规则来设置。如果 udev 找不到所创建设备的权限文件,就将其权限设置为缺省的 660 ,所有者为 root:root 。


    b -- 编译成模块的驱动程序

          前面我们提到了"热插拔事件处理程序"的概念,当内核检测到一个新设备连接时,内核会产生一个热插拔事件,并在 /proc/sys/kernel/hotplug 文件里查找处理设备连接的用户空间程序。udev 初始化脚本将 udevsend 注册为该处理程序。当产生热插拔事件的时候,内核让 udev 在 /sys 文件系统里检测与新设备的有关信息,并为新设备在 /dev 里创建项目

         大多数 Linux 发行版通过 /etc/modules.conf 配置文件来处理模块加载,对某个设备节点的访问导致相应的内核模块被加载。对 udev 这个方法就行不通了,因为在模块加载前,设备节点根本不存在。为了解决这个问题,在 LFS-Bootscripts 软件包里加入了 modules 启动脚本,以及 /etc/sysconfig/modules 文件。通过在 modules 文件里添加模块名,就可以在系统启动的时候加载这些模块,这样 udev 就可以检测到设备,并创建相应的设备节点了。如果插入的设备有一个驱动程序模块但是尚未加载,Hotplug 软件包就有用了,它就会响应上述的内核总线驱动热插拔事件并加载相应的模块,为其创建设备节点,这样设备就可以使用了。



    五、创建和配置mdev

             mdev是udev的简化版本,是busybox中所带的程序,最适合用在嵌入式系统,而udev一般都用在PC上的Linux中,相对mdev来说要复杂些;

    1、我们应该明白,不管是udev还是mdev,他们就是一个应用程序,就跟其他应用程序一样(比如:Boa服务),配置了就可以使用了。为了方便起见,我们就使用busybox自带的一个mdev,这样在配置编译busybox时,只要将mdev的支持选项选上,编译后就包含了mdev设备文件系统的应用(当然你也可以不使用busybox自带的,去下载udev的源码进行编译移植。

    #cd busybox-1.13.0/
    #make menuconfig

    Linux System Utilities --->
        [*] mdev 
        [*]   Support /etc/mdev.conf 
        [*]     Support subdirs/symlinks 
        [*]       Support regular expressions substitutions when renaming device 
        [*]     Support command execution at device addition/removal


    2、udev或者mdev需要内核sysfs和tmpfs虚拟文件系统的支持,sysfs为udev提供设备入口和uevent通道,tmpfs为udev设备文件提供存放空间。所以在/etc/fstab配置文件中添加如下内容(红色部分):

    # device  mount-point     type      options    dump    fsck order
    #----------------------------------------------------------------
    procfs    /proc           proc      defaults    0      0
    sysfs     /sys            sysfs     defaults    0      0
    tmpfs     /dev/shm        tmpfs     defaults    0      0

    usbfs     /proc/bus/usb   usbfs     defaults    0      0
    ramfs     /dev            ramfs     defaults    0      0
    none      /dev/pts        devpts    mode=0622   0      0


    3.、在系统初始化配置文件/etc/init.d/rcS中挂载mdev要用到的sysfs文件系统和tmpfs文件系统,这个在我们介绍根文件系统时已经看到:



         然后启动/sbin目录下的mdev应用对系统的设备进行搜索(红色部分)。

    # Mount virtual filesystem
    /bin/mount -t     proc     procfs    /proc
    /bin/mount -n -t  sysfs    sysfs     /sys
    /bin/mount -n -t  usbfs    usbfs     /proc/bus/usb
    /bin/mount -t     ramfs    ramfs     /dev

    # Make dir
    /bin/mkdir -p /dev/pts
    /bin/mkdir -p /dev/shm
    /bin/mkdir -p /var/log
    /bin/mount -n -t devpts none     /dev/pts -o mode=0622
    /bin/mount -n -t tmpfs tmpfs     /dev/shm

    # Make device node
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    /sbin/mdev -s


    a -- " mdev -s " 的含义是扫描 /sys 中所有的类设备目录,如果在目录中有含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为该设备在/dev下创建设备节点文件;

    b -- "echo /sbin/mdev > /proc/sys/kernel/hotplug" 的含义是当有热插拔事件产生时,内核就会调用位于 /sbin 目录的 mdev 。这时 mdev 通过环境变量中的 ACTION 和DEVPATH,来确定此次热插拔事件的动作以及影响了 /sys 中的那个目录。接着,会看这个目录中是否有“dev”的属性文件。如果有就利用这些信息为这个设备在 /dev 下创建设备节点文件。

    4、在设备驱动程序中加上对类设备接口的支持,即在驱动程序加载和卸载函数中实现设备文件的创建与销毁,这个在我们前面Linux 字符设备驱动结构(二)—— 自动创建设备节点 可以看到实例,下面在介绍一个

         例如在之前篇幅的按键驱动中添加(红色部分):

    #include <linux/device.h> //设备类用到的头文件
    staticint device_major = DEVICE_MAJOR; //用于保存系统动态生成的主设备号
    staticstruct class *button_class; //定义一个类
    
    static int __init button_init(void)
    {
        //注册字符设备,这里定义DEVICE_MAJOR=0,让系统去分配,注册成功后将返回动态分配的主设备号
        device_major = register_chrdev(DEVICE_MAJOR, DEVICE_NAME,&buttons_fops);
    
        if(device_major< 0)
        {
            printk(DEVICE_NAME " register faild!/n");
            return device_major;
        }
    
        //注册一个设备类,使mdev可以在/dev/目录下建立设备节点
        button_class =class_create(THIS_MODULE, DEVICE_NAME);
    
        if(IS_ERR(button_class))
        {
            printk(DEVICE_NAME" create class faild!/n");
            return-1;
        }
    
        //创建一个设备节点,取名为DEVICE_NAME(即my2440_buttons)
        //注意2.6内核较早版本的函数名是class_device_create,现该为device_create
        device_create(button_class,NULL,MKDEV(device_major,0),NULL,DEVICE_NAME);
    
        return 0;
    }
    
    static void __exit button_exit(void)
    {
        //注销字符设备
        unregister_chrdev(device_major, DEVICE_NAME);
    
        //删除设备节点,注意2.6内核较早版本的函数名是class_device_destroy,现该为device_destroy
        device_destroy(button_class,MKDEV(device_major,0));
    
        //注销类
        class_destroy(button_class);
    }


    5、至于mdev的配置文件/etc/mdev.conf,这个可有可无,只是设定设备文件的一些规则。我这里就不管他了,让他为空好了。
     
    6、完成以上步骤后,重新编译文件系统,下载到开发板上,启动开发板后进入开发板的/dev目录查看,就会有很多系统设备节点在这里产生了,我们就可以直接使用这些设备节点了。




    展开全文
  • 在设备树第七节中,我们知道了内核启动时,是把dtb文件所在的内存块保留了下来。 而这个内存块是可以内核中查看的。 查看的位置sys文件系统中。 因为dtb文件是二进制文件,所以要用hexdump命令来查看。 ...

     

    在设备树第七节中,我们知道了在内核启动时,是把dtb文件所在的内存块保留了下来。

    而这个内存块是可以在内核中查看的。

    查看的位置在sys文件系统中。

    因为dtb文件是二进制文件,所以要用hexdump命令来查看。

     hexdump -C  /sys/firmware/fdt 

    部分信息如下,和我们传给内核的dtb文件里的完全一样

     

    当然在/sys/firmware/文件下还有另一个目录文件

    通过上面可以看到fdt文件只能查看

     

    接下来我们查看转换后的设备节点文件

    devicetree目录下的是叫base的根目录。

     

    之后里面就是按照dts写的那样组织的

    通过这里可以查看各个子节点或者属性,比如查看compatible属性

     

    也可以查看以32bit表示的整数

     

    这里要说的是对于函有reg节点的属性,一般我们在写dts的时候是在节点名字后面加上地址的即   node-name@unit-adderss

    [label:] node-name[@unit-address] { 
        [properties definitions]          //就是属性定义,对当前节点描述,将硬件信息提供给内核处理
        [child nodes]                     //子节点 
     } 
    

    所以如果我们写的时候名字后面不跟地址,内核dtb转换device_node的时候名字会自动加上@unit-adderss的

     

    在内核的/sys/devices/platform目录下是展现的现在的所有注册的的平台设备

    这里要说明的是如果设备下面有of_node,就证明这个platform_device是通过设备树传参来创建的。

    当然这个节点是一个连接文件,它指向的是刚才前面在/sys/firmware/devicetree/bse/目录下的设备节点

     

    当然一个在/sys/devices/platform/目录下的设备若是没有of_node的一个链接文件,那么它就不是通过设备树文件创建的。

    可能是内核编译的时候创建或者通过安装模块创建。

     

    最后要说明的是proc文件系统里面的device-tree指向的就是sys文件系统里面的设备树

     

     

    展开全文
  • 嵌入式实时系统中采用的操作系统我们称为嵌入式实时操作系统,它既是嵌入式操作系统,又是实时操作系统。作为一种嵌入式操作系统,它具有嵌入式软件共有的 可裁剪、低资源占用、低功耗等特点;而作为一种实时...

    嵌入式实时系统中采用的操作系统我们称为嵌入式实时操作系统,它既是嵌入式操作系统,又是实时操作系统。作为一种嵌入式操作系统,它具有嵌入式软件共有的 可裁剪、低资源占用、低功耗等特点;而作为一种实时操作系统(本文对实时操作系统特性的讨论仅限于强实时操作系统,下面提到的实时操作系统也均指强实时操 作系统),它与通用操作系统(如Windows、Unix、Linux等)相比有很大的差别,下面我们将通过比较这两种操作系统之间的差别来逐步描述实时 操作系统的主要特点。    
       
    我们在日常工作学习环境中接触最多的是通用操作系统,通用操作系统是由分时操作系统发展而来,大部分都支持多用户和多进程,负责管理众多的进程并为它们分 配系统资源。分时操作系统的基本设计原则是:尽量缩短系统的平均响应时间并提高系统的吞吐率,在单位时间内为尽可能多的用户请求提供服务。由此可以看出, 分时操作系统注重平均表现性能,不注重个体表现性能。如对于整个系统来说,注重所有任务的平均响应时间而不关心单个任务的响应时间,对于某个单个任务来 说,注重每次执行的平均响应时间而不关心某次特定执行的响应时间。通用操作系统中采用的很多策略和技巧都体现出了这种设计原则,如虚存管理机制中由于采用 了LRU等页替换算法,使得大部分的访存需求能够快速地通过物理内存完成,只有很小一部分的访存需求需要通过调页完成,但从总体上来看,平均访存时间与不 采用虚存技术相比没有很大的提高,同时又获得了虚空间可以远大于物理内存容量等好处,因此虚存技术在通用操作系统中得到了十分广泛的应用。类似的例子还有 很多,如Unix文件系统中文件存放位置的间接索引查询机制等,甚至硬件设计中的Cache技术以及CPU的动态分支预测技术等也都体现出了这种设计原 则。由此可见,这种注重平均表现,即统计型表现特性的设计原则的影响是十分深远的。    
       
    而对于实时操作系统,前面我们已经提到,它除了要满足应用的功能需求以外,更重要的是还要满足应用提出的实时性要求,而组成一个应用的众多实时任务对于实 时性的要求是各不相同的,此外实时任务之间可能还会有一些复杂的关联和同步关系,如执行顺序限制、共享资源的互斥访问要求等,这就为系统实时性的保证带来 了很大的困难。因此,实时操作系统所遵循的最重要的设计原则是:采用各种算法和策略,始终保证系统行为的可预测性(predictability)。可预 测性是指在系统运行的任何时刻,在任何情况下,实时操作系统的资源调配策略都能为争夺资源(包括CPU、内存、网络带宽等)的多个实时任务合理地分配资 源,使每个实时任务的实时性要求都能得到满足。与通用操作系统不同,实时操作系统注重的不是系统的平均表现,而是要求每个实时任务在最坏情况下都要满足其 实时性要求,也就是说,实时操作系统注重的是个体表现,更准确地讲是个体最坏情况表现。举例来说,如果实时操作系统采用标准的虚存技术,则一个实时任务执 行的最坏情况是每次访存都需要调页,如此累计起来的该任务在最坏情况下的运行时间是不可预测的,因此该任务的实时性无法得到保证。从而可以看出在通用操作 系统中广泛采用的虚存技术在实时操作系统中不宜直接采用。    
       
    由于实时操作系统与通用操作系统的基本设计原则差别很大,因此在很多资源调度策略的选择上以及操作系统实现的方法上两者都具有较大的差异,这些差异主要体现在以下几点:    
       
    (1)         任务调度策略:    
       
    通用操作系统中的任务调度策略一般采用基于优先级的抢先式调度策略,对于优先级相同的进程则采用时间片轮转调度方式,用户进程可以通过系统调用动态地调整自己的优先级,操作系统也可根据情况调整某些进程的优先级。    
       
    实时操作系统中的任务调度策略目前使用最广泛的主要可分为两种,一种是静态表驱动方式,另一种是固定优先级抢先式调度方式。    
       
    静态表驱动方式是指在系统运行前工程师根据各任务的实时要求用手工的方式或在辅助工具的帮助下生成一张任务的运行时间表,这张时间表与列车的运行时刻表类 似,指明了各任务的起始运行时间以及运行长度,运行时间表一旦生成就不再变化了,在运行时调度器只需根据这张表在指定的时刻启动相应的任务即可。静态表驱 动方式的主要优点是:    
       
    ?                   运行时间表是在系统运行前生成的,因此可以采用较复杂的搜索算法找到较优的调度方案;    
       
    ?                   运行时调度器开销较小;    
       
    ?                   系统具有非常好的可预测性,实时性验证也比较方便;    
       
    这种方式主要缺点是不灵活,需求一旦发生变化,就要重新生成整个运行时间表。    
       
    由于具有非常好的可预测性,这种方式主要用于航空航天、军事等对系统的实时性要求十分严格的领域。    
       
    固定优先级抢先式调度方式则与通用操作系统中采用的基于优先级的调度方式基本类似,但在固定优先级抢先式调度方式中,进程的优先级是固定不变的,并且该优 先级是在运行前通过某种优先级分配策略(如Rate-Monotonic、Deadline-Monotonic等)来指定的。这种方式的优缺点与静态表 驱动方式的优缺点正好完全相反,它主要应用于一些较简单、较独立的嵌入式系统,但随着调度理论的不断成熟和完善,这种方式也会逐渐在一些对实时性要求十分 严格的领域中得到应用。目前市场上大部分的实时操作系统采用的都是这种调度方式。    
       
    (2)         内存管理:    
       
    关于虚存管理机制我们在上面已经进行了一些讨论。为解决虚存给系统带来的不可预测性,实时操作系统一般采用如下两种方式:      
       
    ?                   在原有虚存管理机制的基础上增加页面锁功能,用户可将关键页面锁定在内存中,从而不会被swap程序将该页面交换出内存。这种方式的优点是既得到了虚存管 理机制为软件开发带来的好处,又提高了系统的可预测性。缺点是由于TLB等机制的设计也是按照注重平均表现的原则进行的,因此系统的可预测性并不能完全得 到保障;    
       
    ?                   采用静态内存划分的方式,为每个实时任务划分固定的内存区域。这种方式的优点是系统具有较好的可预测性,缺点是灵活性不够好,任务对存储器的需求一旦有变 化就需要重新对内存进行划分,此外虚存管理机制所带来的好处也丧失了。    
       
    目前市场上的实时操作系统一般都采用第一种管理方式。    
       
    (3)         中断处理:    
       
    在通用操作系统中,大部分外部中断都是开启的,中断处理一般由设备驱动程序来完成。由于通用操作系统中的用户进程一般都没有实时性要求,而中断处理程序直接跟硬件设备交互,可能有实时性要求,因此中断处理程序的优先级被设定为高于任何用户进程。    
       
    但对于实时操作系统采用上述的中断处理机制是不合适的。首先,外部中断是环境向实时操作系统进行的输入,它的频度是与环境变化的速率相关的,而与实时操作 系统无关。如果外部中断产生的频度不可预测,则一个实时任务在运行时被中断处理程序阻塞的时间开销也是不可预测的,从而使任务的实时性得不到保证;如果外 部中断产生的频度是可预测的,一旦某外部中断产生的频度超出其预测值(如硬件故障产生的虚假中断信号或预测值本身有误)就可能会破坏整个系统的可预测性。 其次,实时操作系统中的各用户进程一般都有实时性要求,因此中断处理程序优先级高于所有用户进程的优先级分配方式是不合适的。    
       
    一种较适合实时操作系统的中断处理方式为:除时钟中断外,屏蔽所有其它中断,中断处理程序变为周期性的轮询操作,这些操作由核心态的设备驱动程序或由用户 态的设备支持库来完成。采用这种方式的主要好处是充分保证了系统的可预测性,主要缺点是对环境变化的响应可能不如上述中断处理方式快,另外轮询操作在一定 程度上降低了CPU的有效利用率。另一种可行的方式是:对于采用轮询方式无法满足需求的外部事件,采用中断方式,其它时间仍然采用轮询方式。但此时中断处 理程序与所以其它任务一样拥有优先级,调度器根据优先级对处于就绪态的任务和中断处理程序统一进行处理器调度。这种方式使外部事件的响应速度加快,并避免 了上述中断方式带来第二个问题,但第一个问题仍然存在。    
       
    此外为提高时钟中断响应时间的可预测性,实时操作系统应尽可能少地屏蔽中断。    
       
    (4)         共享资源的互斥访问:    
       
    通用操作系统一般采用信号量机制来解决共享资源的互斥访问问题。    
       
    对于实时操作系统,如果任务调度采用静态表驱动方式,共享资源的互斥访问问题在生成运行时间表时已经考虑到了,在运行时无需再考虑。如果任务调度采用基于 优先级的方式,则传统的信号量机制在系统运行时很容易造成优先级倒置问题(Priority   Inversion),即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又 被其它一些中等优先级的任务抢先,因此造成高优先级任务被许多具有较低优先级的任务阻塞,实时性难以得到保证。因此在实时操作系统中,往往对传统的信号量 机制进行了一些扩展,引入了如优先级继承协议(Priority   Inheritance   Protocol)、优先级顶置协议(Priority   Ceiling   Protocol)以及Stack   Resource   Policy等机制,较好地解决了优先级倒置的问题。    
       
    (5)         系统调用以及系统内部操作的时间开销:    
       
    进程通过系统调用得到操作系统提供的服务,操作系统通过内部操作(如上下文切换等)来完成一些内部管理工作。为保证系统的可预测性,实时操作系统中的所有 系统调用以及系统内部操作的时间开销都应是有界的,并且该界限是一个具体的量化数值。而在通用操作系统中对这些时间开销则未做如此限制。    
       
    (6)         系统的可重入性:    
       
    在通用操作系统中,核心态系统调用往往是不可重入的,当一低优先级任务调用核心态系统调用时,在该时间段内到达的高优先级任务必须等到低优先级的系统调用 完成才能获得CPU,这就降低了系统的可预测性。因此,实时操作系统中的核心态系统调用往往设计为可重入的。    
       
    (7)         辅助工具:    
       
    实时操作系统额外提供了一些辅助工具,如实时任务在最坏情况下

    展开全文
  • 32位系统什么x86系统呢?

    万次阅读 2017-07-05 09:21:44
    以下未经考证: x86指的是一种cpu的架构 因为intel的8086,286,386~586而得名 ...基于32位cpu开发的操作系统32位操作系统,因为目前x86架构32位cpu的知名度,32位操作系统也通常被称为x86系统 1的缺陷
  • 物联网设备网关系统架构设计

    千次阅读 2017-12-26 11:37:46
    越来越多的业务场景需要通过硬件设备进行延伸,软硬结合的开发模式也是一种流行的趋势。
  • 边缘设备系统及计算杂谈(1)

    千次阅读 2020-11-15 15:40:03
    缘起机缘巧合,未来一段时间要从事一个新兴的领域——边缘设备系统、及计算。边缘设备,从物理形态看,是出现于云、端之间,更接近端侧(也就是设备侧)的一种新型设备。它是伴随万物互联IoT而...
  • 设备与文件系统IO性能比较

    千次阅读 2011-10-19 10:32:40
    设备,也裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。本文收集裸设备和Oracle问答20例。  1.什么叫做裸设备?  裸设备,也裸分区(原始分区),是一种没有...
  • 什么设备上下文

    千次阅读 2008-10-21 16:31:00
    当然你爱怎么随你的便,我还是喜欢说为设备场景。那 么究竟什么设备场景呢?设备场景是一种windows对象,而windows则是一种图形环境,其图形系统令人难以自信地灵活和强大。而实质,widnows下的所有绘图都是...
  • 文件系统之块设备文件

    千次阅读 2013-11-27 09:28:48
    linux 操作系统秉承“一切都是...理解块设备文件,关键有两方面,一,从外部表现看,他是属于某个外部文件系统上的一个文件,通常将他们存放/dev目录下,用户像常规文件一样通过文件名对他们进行访问;二,从内部实现
  • 缘起本期继续讨论边缘领域里的另一个有意思的东西——语言。正如前文所说,边缘设备终端、云端(或者后台系统)中出现的一种新形态的设备。它肯定不是终端,因为它比终端能力强,而且倾向于它是...
  • Ceph 是一个开源的分布式存储系统,包括对象存储、块设备、文件系统。它可靠性高、管理方便、伸缩性强,能够轻松应对PB、EB级别数据。Ceph 存储体系中,核心为 RADOS,它是一个高可用分布式对象存储,该模块负责对...
  • 系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # ls
  • 计算机中,系统调用(英语:system call),又称为系统呼叫,指运行使用者空间的程序向 操作系统内核请求需要更高权限运行的服务。系统调用提供了用户程序与操作系统之间的接口( 即系统调用是用户程序和内核...
  • 工作的5年中,曾经数次研究过kernel,但一直没有合适的机会或者说推动力去深入研究。这次有机会了,岂能放过呢?以前搞kernel,总是觉得没有合适的设备,都玩不转。最近琢磨了几天,打算从android虚拟设备goldfish...
  • 什么叫做裸设备

    千次阅读 2016-05-22 00:18:51
    设备,也裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。本文收集裸设备和Oracle问答20 例。   1.什么叫做裸设备?    裸设备,也裸分区(原始分区),...
  • 什么是嵌入式系统

    千次阅读 2018-12-29 11:02:45
    计算机,手机,平板,笔记本电脑,数字电子系统以及其他电子和电子设备都是使用嵌入式系统设计的。 什么是嵌入式系统? 将硬件电路与用于提供项目解决方案的软件编程技术集成的电子系统称为嵌入式系统。通过使用...
  • 经过多年的猜测和谣言,中国科技巨头华为2019年正式发布了其Harmony OS操作系统。可以说,提出的问题多于回答的问题。它是如何工作的?它解决什么问题?这是华为与美国政府之间当前仇恨的产物吗? 是否基于...
  • 获取Android设备上的所有存储设备

    千次阅读 2016-05-16 18:08:18
    Android系统提供了Environment.getExternalStorageDirectory()接口获得存储设备的路径,但是这个接口往往给出的结果并不是我们想要的,某些设备上它返回的是手机内部存储,某些设备上返回的手机外部存储。...
  • http://blog.csdn.net/cglover/archive/2007/06/01/1634300.aspx directx中丢失的设备(lost device) 丢失的设备一个Microsoft? Direct3D?可以处于操作状态或丢失状态。操作状态是
  • “Ceph是一个开源的、统一的、分布式的存储系统”,这是我们宣传Ceph时常说的一句话,其中“统一”是说Ceph可以一套存储系统同时提供块设备存储、文件系统存储和对象存储三种存储功能。一听这句话,具有一定存储基础...
  • 程序员必知的 89 个操作系统核心概念

    万次阅读 多人点赞 2020-03-31 19:13:39
    操作系统(Operating System,OS):是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优先次序、... 过去,它是类似 Unix 的系统上...
  • 所谓虚拟设备技术,是一类物理设备上模拟另一个物理设备技术,是将独占设备转换为共享设备的技术。 用来代替独占型设备的那部分外存空间称为虚拟设备。 对虚拟设备采用虚拟设备。当某进程需要与独占设备交换信息...
  • windows设备上下文的概念

    千次阅读 2016-08-06 22:57:03
    当然你爱怎么随你的便,我还是喜欢说为设备场景。 那 么究竟什么设备场景呢? 设备场景是一种windows对象,而windows则是一种图形环境,其图形系统令人难以自信地灵活和强大。而实质,widnows下的所有绘图都是...
  • 【转】什么叫做裸设备

    千次阅读 2018-06-04 12:03:35
    设备,也裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。本文收集裸设备和Oracle问答20例。 1.什么叫做裸设备? 裸设备,也裸分区(原始分区),是一种没有经过...
  • 设备,也裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。本文收集裸设备和Oracle问答20例。   1.什么叫做裸设备?  裸设备,也裸分区(原始分区),是一种...
  • 什么是信息系统

    千次阅读 2013-07-10 16:55:08
    什么是信息系统 一.名称 信息系统的英文名是Information System 二.定义 信息系统是由计算机硬件、网络和通讯设备、计算机软件、信息资源、信息用户和规章制度组成的以处理信息流为目的的人机一体化系统。 三...
  • 关于文件系统设备堆栈的说明

    千次阅读 2006-02-04 13:06:00
    若干关于 file system driver stack... 大家都知道这样的一个读写文件irp是发送给file system的driver的file system把这个irp交给了下层的device 这个devicelogical volume device,它由device的vbp里面的realdevice指
  • 什么是文件系统

    万次阅读 2018-09-30 14:06:42
    文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区的文件的方法和数据结构,即存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统...
  • 办公自动化没有统一的定义,凡是传统的办公室中采用各种新技术、新机器、新设备从事办公业务,都属于办公自动化的领域。行政机关中,大都把办公自动化叫做电子政务,企事业单位就都OA,即办公自动化。通过实现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 228,696
精华内容 91,478
关键字:

在设备上的系统叫什么