大疆笔试

1.中断的context:
处理器总处于以下状态中的一种:
1、内核态,运行于进程上下文,内核代表进程运行于内核空间;
2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;
3、用户态,运行于用户空间。

        所谓的“进程上下文”,就是一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈上的内容,当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。
        Linux内核工作在进程上下文或者中断上下文。提供系统调用服务的内核代码代表发起系统调用的应用程序运行在进程上下文;另一方面,中断处理程序,异步运行在中断上下文。中断上下文和特定进程无关。
上下文context:上下文简单说来就是一个环境,相对于进程而言,就是进程执行时的环境。具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。
一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。
        用户级上下文: 正文、数据、用户堆栈以及共享存储区;
        寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP);
        系统级上下文: 进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈

        所谓的“中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被中断的进程环境)。

        当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文。当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够必得到切换时的状态执行下去。在LINUX中,当前进程上下文均保存在进程的任务数据结构中。在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程。但同时会保留所有需要用到的资源,以便中继服务结束时能恢复被中断进程的执行。

2.assert
    assert 宏的原型定义在 assert.h 中,其作用是如果它的条件返回错误,则终止程序执行。
    使用 assert 的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。
    在调试结束后,可以通过在包含 #include 的语句之前插入 #define NDEBUG 来禁用 assert 调用,

3.带宽
    内存带宽计算bai公式:带宽=内存核心频率×内存总线位数du×倍增系数zhi。
    下面计算一下一条标称DDR3 1066的内存条在默认频率下的带宽:
1066是指有效数据传输频率,除以8才是核心频率。一条内存只用采用单通道模式,位宽为64bit。所以
内存带宽=(1066/8)×64×8=68224Mbit。由此可知,如果内存工作在标称频率的时候,可以直接用标称频率×位宽,简化公式。
再根据8bit(位)=1Byte(字节),得68224/8=8528MByte=8.328125GB。
再以两条标称1066超频到1200的DDR3内存,组成双通道后的带宽:
超频到1200后,内存核心频率应为1200/8=150MHz,而双通道的位宽=128bit:
带宽=150×128×8=153600Mbit=18.75GB

4.实时操作系统有哪些
    ThreadX是优秀的硬实时微内核嵌入式操作系统(RTOS)
    ucos,freertos
    LINUX,
    专业级的VxWorks用于航天军功路由器等关键领域

5.文件操作系统
    Linux操作系统使用虚拟文件系bai统(VFS)向上du和用户进程文件访问系统调用接口,向下和具体不同文件系统的实现接口。VFS屏蔽了具体文件的实现细节,向上提供统一的操作接口。通过VFS可以实现任意的文件系统,这些文件系统通过文件访问系统调用都可以访问。所以Linux系统核心可以支持十多种文件系统类型。
    ext专门为Linux设计的,为linux核心所做的第一个文件系统。单个文件最大限制:未知;该文件系统最大支持2GB的容量。
    ext2由Rémy Card设计,用以代替ext,是LINUX内核所用的文件系统。单个文件最大限制2TB;该文件系统最大支持32TB的容量。
    ext3一个日志文件系统。单个文件最大限制16TB,该文件系统最大支持32TB的容量。
    ext4Theodore Tso领导的开发团队实现,Linux系统下的日志文件系统。单个文件最大限制16TB,该文件系统最大支持1EB的容量。
   JFS2一种字节级日志文件系统,该文件系统主要是为满足服务器的高吞吐量和可靠性需求而设计、开发的。单个文件最大限制16TB,该文件系统最大支持1PB的容量。

6.进程间的通信

1.管道:速度慢,容量有限,只有父子进程能通讯    

2.FIFO:任何进程间都能通讯,但速度慢    

3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题    

4.信号量:不能传递复杂消息,只能用来同步    

5.共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存


7.内存共享映射(mmap)
mmap可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存地址,对文件的读写可以直接用指针来做而不需要read/write函数。
* 用于进程间通信时,一般设计成结构体,来传输通信的数据
* 进程间通信的文件,应该设计成临时文件
* 当报总线错误时,优先查看共享文件是否有存储空间

8.fread函数
    从给定输入流stream读取最多count个对象到数组buffer中(相当于对每个对象调用size次fgetc),把buffer当作unsigned char数组并顺序保存结果。流的文件位置指示器前进读取的字节数。
若出现错误,则流的文件位置指示器的位置不确定。若没有完整地读入最后一个元素,则其值不确定。
buffer
指向要读取的数组中首个对象的指针
size
每个对象的大小(单位是字节)
count
要读取的对象个数
stream
输入流
9.实时系统和非实时系统优缺点,如何选用
    多路性/交互性/独立性/及时性/可靠性
(1)多路性。
实时信息处理系统与分时系统一样具有多路性。系统按分时原则为多个终端用户服务;而对实时控制系统,其多路性则主要表现在经常对多路的现场信息进行采集以及对多个对象或多个执行机构进行控制。
(2)独立性。
实时信息处理系统与分时系统一样具有独立性。每个终端用户在向分时系统提出服务请求时,是彼此独立的操作,互不干扰;而在实时控制系统中信息的采集和对对象的控制,也彼此互不干扰。
(3)及时性。
实时信息系统对实时性的要求与分时系统类似,都是以人所能接受的等待时间来确定;而实时控制系统的及时性,则是以控制对象所要求的开始截止时间或完成截止时间来确定的,一般为秒级、百毫秒级直至毫秒级,甚至有的要低于100微秒。
(4)交互性。
实时信息处理系统具有交互性,但这里人与系统的交互,仅限于访问系统中某些特定的专用服务程序。它不像分时系统那样能向终端用户提供数据处理服务、资源共享等服务。
(5)可靠性。
分时系统要求系统可靠,相比之下,实时系统则要求系统高度可靠。因为任何差错都可能带来巨大的经济损失甚至无法预料的灾难性后果。因此,在实时系统中,采取了多级容错措施来保证系统的安全及数据的安全。







全部评论

相关推荐

评论
点赞
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务