海康威视

news/2024/9/26 3:22:29

1 static关键字作用

修饰局部变量
​ static修饰局部变量时,使得被修饰的变量成为静态变量,存储在静态区。存储在静态区的数据生命周期与程序相同,在main函数之前初始化,在程序退出时销毁。(无论是局部静态还是全局静态)

修饰全局变量
​ 全局变量本来就存储在静态区,因此static并不能改变其存储位置。但是,static限制了其链接属性。被static修饰的全局变量只能被该包含该定义的文件访问(即改变了作用域)。

修饰函数
​ static修饰函数使得函数只能在包含该函数定义的文件中被调用。对于静态函数,声明和定义需要放在同一个文件夹中。

修饰成员变量
​ 用static修饰类的数据成员使其成为类的全局变量,会被类的所有对象共享,包括派生类的对象,所有的对象都只维持同一个实例。 因此,static成员必须在类外进行初始化(初始化格式:int base::var=5;),而不能在构造函数内进行初始化,不过也可以用const修饰static数据成员在类内初始化。

修饰成员函数
​ 用static修饰成员函数,使这个类只存在这一份函数,所有对象共享该函数,不含this指针,因而只能访问类的static成员变量。静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问。例如可以封装某些算法,比如数学函数,如ln,sin,tan等等,这些函数本就没必要属于任何一个对象,所以从类上调用感觉更好。

最重要的特性:隐藏
​ 当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏。

2 涉及Linux系统调用

3 协议

4 在请求分页存储管理中,当访问的页面不在内存时,便产生缺页中断,缺页中断是属于()。

I/O中断
程序中断
访管中断
外中断

中断类型分为如下两大类:
一、强迫性中断:正在运行的程序所不期望的,来自硬件故障或外部请求。
1、I/O 中断:来自外部设备通道;
2、程序性中断:运行程序本身的中断,如 溢出、缺页中断、缺段中断、地址越界。
3、时钟中断
4、控制台中断
5、硬件故障
二、自愿性中断:用户在编程时要求操作系统提供的服务,使用访管指令或系统调用使中断发生。也称为访管中断。包括执行I/O,创建进程,分配内存,信号量操作,发送/接收消息。

5 红黑树

  • 节点是红色或黑色。
  • 根是黑色。
  • 所有叶子都是黑色(叶子是NIL节点)。
  • 每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)
  • 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点(简称黑高)。

6 中断服务函数

中断处理函数的返回值和形参

中断处理函数不能有返回值和形参,因为中断处理函数都是硬件调用(或者叫触发),没有程序给它传递参数,也没有程序接收它的返回值,其参数的传递通过全局变量的方式。
但是要注意,如果在中断服务函数中改变了供其他函数检测的全局变量的值,要使用volatile关键字定义该全局变量。因为主程序可能将该变量读取到寄存器中,以后每次只使用寄存器中的变量副本,这时候通过不使用volatile关键字,会导致中断服务函数中修改该变量的操作被短路。

为什么中断处理函数中不能出现阻塞

1、 中断处理的时候,不应该发生进程切换,因为在中断context中,唯一能打断当前中断handler的只有更高优先级的中断,它不会被进程打断,如果在中断context中休眠,则没有办法唤醒它,因为所有的wake_up_xxx都是针对某个进程而言的,而在中断context中,没有进程的概念,没有一个task_struct(这点对于softirq和tasklet一样),因此真的休眠了,比如调用了会导致block的例程,内核几乎肯定会死

2、schedule()在切换进程时,保存当前的进程上下文(CPU寄存器的值、进程的状态以及堆栈中的内容),以便以后恢复此进程运行。中断发生后,内核会先保存当前被中断的进程上下文(在调用中断处理程序后恢复);但在中断处理程序里,CPU寄存器的值肯定已经变化了吧(最重要的程序计数器PC、堆栈SP等),如果此时因为睡眠或阻塞操作调用了schedule(),则保存的进程上下文就不是当前的进程context了.所以不可以在中断处理程序中调用schedule()。

3、中断处理程序是带便进程执行的,它所代表的进程必须总处理TASK_RUNNING状态。当一个中断处理程序正在运行时,他所代表的IRQ线上发出的信号就会暂时被忽略

4、同样也是为了实现中断嵌套进行所付出的代价,如果要保证可以中断嵌套,就中断处理程序必须永不阻塞。

7 关于信号量描述错误的为

信号量只能在线程之间共享

不允许销毁一个正在等待的信号量

用户态使用的信号量分为POSIX信号量和SYSTEM V信号量

信号量有两种基本操作:V操作,信号量加1;P操作,信号量减1(如果信号量为0,则阻塞)

Linux 内核中的信号量使用和用户态的信号量使用有所不同,

1、内核信号量,由内核控制路径使用。

2、用户态信号量分为两种,一种为POSIX,另一种为 SYSTEM V

8 进程和线程的描述正确

每个线程拥有自己的堆栈和局部变量

线程是程序执行的最小单位

进程有独立的地址空间,而线程没有

9 在程序执行过程中,该程序的某一个函数func()中申请的static型变量V有以下哪些特性

V仅能被func()使用
V存在于整个程序执行过程

10 能在Linux内核态执行的是

进程调度

缺页异常

时钟中断

11 主存与cache的地址映射方式有全相联方式、直接方式和组相联方式三种

12 Linux进程间通信方试中,如下哪一种最常用且最高效?

为什么共享内存最高效?

消息队列和管道基本上都是4次拷贝,而共享内存(mmap, shmget)只有两次。

4次:1,由用户空间的buf中将数据拷贝到内核中。2,内核将数据拷贝到内存中。3,内存到内核。4,内核到用户空间的buf;
2次: 1,用户空间到内存。 2,内存到用户空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/30613.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

.net core 实现注册同一服务类型的多个服务实例

1. 注册服务。给 IMyDependency 注册两个不同的实现。builder.Services.AddSingleton<IMyDependency, MyDependency>(); builder.Services.AddSingleton<IMyDependency, DifferentDependency>();2. 依赖注入。通过 IEnumerable<IMyDependency> 获取两个不同的…

PWN的一些前置知识

PWN的一些前置知识点 虽然我超想打web方向,但是其实感觉每个方向都一窍不通555,算了先学学pwn和misc再说吧 大致流程 查看文件 使用checksec命令,查看是否开启PIE,ASLR等,查看是否有canary(栈保护的机制) 静态分析 使用IDA pro或者其他静态分析软件,获取软件逆向代码 动…

多版本同时维护的 Bug 修复源代码保存方案

问题描述 在日常维护系统的过程中,我们经常需要修复他人提交的 Bug(因为自己写的都是 feature 嘛)。对于单个线上版本的项目,我们可以轻松地创建一个 bug 修复分支,修复完成后再将其合并到主分支即可。 然而,当系统同时存在多个线上版本时,比如 V1.0.1、V1.0.2、V1.0.3、…

汇编(机器码)

2440常用汇编指令https://blog.csdn.net/weixin_58016534/article/details/131180529

HTTP 连接详解

概述 世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的,客户端可以打开一条TCP/IP连接,连接到任何地方的服务器。一旦连接建立,客户端和服务器之间交换的报文就永远不会丢失、受损或失序 TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的、可靠的、基于…

redis之主从复制

1.基本环境(1) Lunix centos7(2) redis版本:redis7.0.0(3) gcc已经配置成功,并且默认redis7.0.0环境已经在linux中做好了 2.架构说明(1) 一个master两salve (方便期间配置好一个后,其他两个配置文件修改即可)① Master : 10.0.0.18 6379② Slave1: 10.0.0.19 6380③ Slave…

LM Studio 本地离线部署大模型

安装 LM Studio官网: https://lmstudio.ai/下载模型:Meta-Llaa-3-8B-Instruet.Q4_KM.gguf下载地址: https://cdn-lfs-us-1.huggingface.co/repos/79/f2/79f21025e377180e4ec0e3968bca4612bb9c99fa84e70cb7815186c42a858124/647a2b64cbcdbe670432d0502ebb2592b36dd364d51a9ef7a1…

Presto学习笔记——Go客户端连接Presto

1.查询PrestoDB(facebook版本) 1.创建PrestoDB环境 使用docker创建presto测试环境https://hub.docker.com/r/prestodb/presto/tags拉取镜像docker pull prestodb/presto:0.284启动docker run -p 8080:8080 -ti -v /Users/lintong/Downloads/config.properties:/opt/presto-se…