由源代码生成可执行文件需要经过预编译,编译,汇编,链接等阶段,错误:unresolved external symbol BeginScene属于()阶段错误。
A 预编译
B 编译
C 汇编
D 链接
无法解析的外部符号,说明单个文件已经编译通过,在链接时,查找外部符号没有找到,无法解析,所以是发生在链接阶段。
程序出错在什么阶段()?
int main(void)
{
http://www.taobao.com
cout << "welcome to taobao" << endl;
return 0;
}
A 预处理阶段出错
B 编译阶段出错
C 汇编阶段出错
D 链接阶段出错
E 运行阶段出错
F 程序运行正常
双斜杠之后的www.taobao.com被当做注释了,那么前面的http:是否合法?这就是C++中一个几乎不会被用到的语法,标签。
带标签的语句是一种特殊的语句,在语句前面有一个标识符(即标签,上段代码中的http) 和一个冒号。使用goto label就可以跳到标签处执行,比如可以在代码中写goto http,这样就会执行cout语句
了。
对于普通的计算机,对以下事件的平均耗时从小到大排序为____:
A.读取1KB内存数据 B.从硬盘连续读取1KB数据 C.读取一次L2缓存 D.一次磁盘寻道
A C,A,D,B
B C,D,A,B
C D,C,A,B
D D,A,C,B
磁道
以盘片中心为圆心,用不同的半径,划分出不同的很窄的圆环形区域,称为磁道
扇区
磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区扇区是磁盘最小的物理存储单元
柱面
上下一串盘片中,相同半径的磁道所组成的一个圆柱型的环壁,就称为柱面
一进程刚获得三个主存块的使用权,若该进程访问页面的次序是{1321215123},采用LRU算法时,缺页数是______次。
A 3
B 4
C 5
D 6
在缺页处理过程中,操作系统执行的操作可能是()。
Ⅰ.修改页表 Ⅱ.磁盘 I/O Ⅲ.分配页框
A 仅Ⅰ、 Ⅱ
B 仅Ⅱ
C 仅Ⅲ
D Ⅰ、 Ⅱ和Ⅲ
解答:设文件创建默认权限为mode,则实际权限为 :mode & unmask。 umask 0244 ----> 0666 & 0244 = 0422
umask
语法: umask [-S][权限掩码]
功能说明: 查看或者修改建立文件时的权限掩码。
补充说明: umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
新建文件默认权限0666, 新建目录默认权限0777 (文件默认没有可执行权限)
root 用户默认掩码0022, 普通用户默认掩码 0002.
Linux中包括两种链接:硬链接(Hard Link)和软连接(Soft Link),下列说法正确的是()
A 软连接可以跨文件系统进行连接,硬链接不可以
B 当删除原文件的时候软连接文件仍然存在,且指向的内容不变
C 硬链接被删除,磁盘上的数据文件会同时被删除
D 硬链接会重新建立一个inode,软链接不会
B: 前半句对,指向的内容会改变
硬连接不管有多少个,都指向的是同一个inode节点,会把结点连接数增加,只要结点的连接数不是 0 ,文件就一直存在不管你删除的是源文件还是连接的文件。只要有一个存在文件就存在。 当你修改源文件或者连接文件任何一个的时候,其他的文件都会做同步的修改。软链接不直接使用 i 节点号作为文件指针 , 而是使用文件路径名作为指针。所以删除连接文件对源文件无影响,但是删除源文件,连接文件就会找不到要指向的文件。软链接有自己的 i 节点 , 并在磁盘上有一小片空间存放路径名。
硬链接是不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。相反都是软连接会重新建立一个inode,当然inode的结构跟其他的不一样,他只是一个指明源文件的字符串信息。一旦删除源文件,那么软连接将变得毫无意义。而硬链接删除的时候: 1. 在目录中将其删除 2. inode link count - 1,系统调用会检查inode link count的数值,如果他>=1,那么inode不会被回收。因此文件的内容不会被删除。
硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。
软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名(filename)进行链接(当然此时如果你vi这个软链接文件,linux会自动新建一个文件名为filename的文件),硬链接不可以(其文件必须存在,inode必须存在);软链接可以对目录进行连接,硬链接不可以。两种链接都可以通过命令 ln 来创建。ln 默认创建的是硬链接。使用 -s 开关可以创建软链接。
链接https://www.nowcoder.com/questionTerminal/1b695f9055ed4017a9fe578ef8b02c34 来源牛客网
说说软硬链接的区别
- 定义不同
软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。
硬链接就是一个文件的一个或多个文件名。把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。- 限制不同
硬链接只能对已存在的文件进行创建,不能交叉文件系统进行硬链接的创建;
软链接可对不存在的文件或目录创建软链接;可交叉文件系统;- 创建方式不同
硬链接不能对目录进行创建,只可对文件创建;
软链接可对文件或目录创建;- 影响不同
删除一个硬链接文件并不影响其他有相同 inode 号的文件。
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
使用C语言将一个1G字节的字符数组从头到尾全部设置为字’A’,在一台典型的当代PC上,需要花费的CPU时间的数量级最接近()
A 0.001秒
B 1秒
C 100秒
D 2小时
1G = 1024M = 10241024K = 102410241024Byte
每次赋值1Byte都要执行一条指令(10-9s)所以时间:10241024102410-9s = 1.073741824 s
设系统缓冲区和用户工作区均采用单缓冲,从外设读入1 个数据块到系统缓冲区的时间为100,从系统缓冲区读入 1 个数据块到用户工作区的时间为 5, 对用户工作区中的 1 个数据块进行分析的时间为 90(如下图所示)。进程从外设读入并分析 2 个数据块的最短时间是()。
A 200
B 295
C 300
D 390
现代计算机普遍采用总线结构,包括数据总线、地址总线、控制总线,通常与数据总线位数对应相同的部件是( )
A CPU
B 存储器
C 地址总线
D 控制总线
基础概念
地址总线:目决定内存数据操作的地址
1.、CPU是通过地址总线来指定存储单元的。
2.、地址总线决定了CPU能访问的最大内存空间的大小。
3、地址总线是地址线数量之和。
数据总线:决定传输的数据值。(字长大小)
1、决定一次数据传输可决定的数据大小。
2、数据总线的宽度决定了CPU和外界的数据传送速度。
3、每条传输线只能传递1位二进制数据。
4、数据总线是数据线条数之和。
控制总线:反映了数据的状态和传输方式。
1、CPU通过控制总线对外部器件进行控制。
2、控制总线的宽度决定了CPU对外器件的控制能力。
3、控制总线控制线数量之和。
参考答案:
数据总线用于传送数据信息。数据总线是双向三态形式的总线,即它既可以把 CPU 的数据传送到存储器或输入输出接口等其他部件,也可以将其他部件的数据传送到 CPU 。数据总线的位数是微型计算机的一个重要指标,通常与微处理的字长相一致。例如,Intel 8086 微处理器字长 16 位,其数据总线宽度也是 16 位。
故正确答案为 A 选项。
以下哪些不是内核对象()
A 进程
B 线程
C 互斥器
D 临界区
下列选项中,导致 创建 新进程的操作是()
I用户登陆成功II设备分配III启动程序执行
A 仅I和II
B 仅II和III
C 仅I和III
D I、II和III
进程在运行期间通过创建进程系统调用来创建多个新进程。每个进程都有生命期,即从创建到消亡的时间周期。当操作系统为一个程序构造一个进程控制块并分配地址空间之后, 就创建了一个进程。进程的创建来源于以下四个事件。
●提交一个批处理作业。
●在终端上一个交互式作业登录。
●操作系统创建一个服务进程。
●存在的进程创建新的进程。(fork
)
因此,在本题中,能导致创建新进程的操作有用户登录成功和启动程序执行。
关于子进程和父进程的说法,下面哪一个是正确的?()
A 一个父进程可以创建若干个子进程,一个子进程可以从属于若干个父进程
B 父进程被撤销时,其所有子进程也被相应撤消
C 子进程被撤销时,其从属的父进程也被撤销
D 一个进程可以没有父进程或子进程
0号进程没有父进程
除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程
fork()
int main()
{
fork();
fork();
fork();
printf("hello world\n");
exit(0);
}
第一个 fork 执行了 1 次。第二 fork 执行了 2 次,第三个 fork 执行了 4 次。
基本概念:
管道:
管道中还有命名管道和非命名(匿名管道)管道之分,非命名管道只能用于父子进程通讯,命名管道可用于非父子进程,命名管道就是FIFO,管道是先进先出的通讯方式。FIFO是一种先进先出的队列。 它类似于一个管道,只允许数据的单向流动。每个FIFO都有一个名字,允许不相关的进程访问同一个FIFO, 因此也成为命名管。
消息队列:
是用于两个进程之间的通讯,首先在一个进程中创建一个消息队列,然后再往消息队列中写数据,而另一个进程则从那个消息队列中取数据。需要注意的是,消息队列是用创建文件的方式建立的,如果一个进程向某个消息队列中写入了数据之后,另一个进程并没有取出数据,即使向消息队列中写数据的进程已经结束,保存在消息队列中的数据并没有消失,也就是说下次再从这个消息队列读数据的时候,就是上次的数据!
共享内存:
只要首先创建一个共享内存区,其它进程按照附加到共享区的内存当中,就能访问到这个共享内存区中的数据,当然可读可写;
套接字:
套接字是当今使用最频繁的进程间通信方式,就是网络通信。
进程间通讯的方式中哪种的访问速度最快?
A 管道
B 消息队列
C 共享内存
D 套接字
管道:速度慢,容量有限
消息队列:容量受到系统限制,且要注意第一次读的时候, 要考虑上一次没有读完数据的问题。
共享内存:能够很容易控制容量,速度快
套接字:需要跨网络,虽然可以持续的传递, 但是在速度上还是没有共享内存快捷
下列关于管道(Pipe)通信的叙述中,正确的是 ()
A 一个管道可实现双向数据传输
B 管道的容量仅受磁盘容量大小限制
C 进程对管道进行读操作和写操作都可以被阻塞
D 一个管道只能有一个读写进程或一个写进程对其操作
下面选项中,满足短任务优先且不会发生饥饿现象的调度算法是()。
A 先来先服务
B 高响应比优先
C 时间片轮转
D 非抢占式短任务优先
先来先服务 FCFS算法特点:
1.是一种最简单的调度算法,即可用于作业调度, 也可用于进程调度
2.有利于长作业(进程),而不利于短作业(进程)
3.有利于CPU繁忙型作业,而不利于I/0繁忙型作业
高响应比优先 HRN算法特点:
◎当等待时间相同时,短进程的优先权高;
◎当需要运行时间相同时,作业的优先权又取决于等待时间,相当于先到先服务;
◎长作业的优先级可以随着等待时间的增加而提高,因此长作业等待一段时间后仍能得到调度。
时间片轮转 RR算法特点:
1.时间片轮转调度算法是一种最古老, 最简单,最公平的且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许进行的时间。如果在时间片结束时进程还在运行,则cpu将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则cpu当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完他的时间片后,就被移动到队列的末尾。
非抢占式短任务优先:
因为是非抢占式且短任务优先,则长作业的优先级就比较低, 在短作业非常 多的情况下,对长作业非常的不友好。
进程调度时,下列进程状态的变化过程哪一项是不可能发生的?()
A 阻塞挂起->阻塞
B 就绪挂起->就绪
C 就绪挂起->阻塞挂起
D 阻塞挂起->就绪挂起
下列选项中,降低进程优先级的合理 时机 是()
A 进程的时间片用完
B 进程刚完成I/O,进入就绪列队
C 进程持久处于就绪列队
D 进程从就绪状态转为运行态
下列选项中,会导致进程从执行态变为就绪态的事件是()。
A 执行 P(wait)操作
B 申请内存失败
C 启动 I/O 设备
D 被高优先级进程抢占
一个进程的读磁区操作完成后,操作系统针对该进程必做的是 ()
A 修改进程状态为就绪态
B 降低进程优先级
C .进程分配用户内存空间
D 增加进程的时间片大小
有一个程序中有A,B,C三个线程同时对一个文件进行读写操作,其中的A,B是写进程只负责往里面写数据,C是读线程,同时把读取的数据从文件中删除,A线程单独
写满文件需要10个小时,B单独写程序需要6小时,C线程需要15小时才能读取完整个文件,不考虑三个线程之间的相互影响的情况下现在____小时才能写满文件
A 5
B 6
C 5.5
D 4.5
E 4.8
F 5.3
以下关于多线程的叙述错误的是:
A 线程同步的方法包括使用临界区,互斥量,信号量等
B 两个线程同时对简单类型全局变量进行写操作也需要互斥
C 实现可重入函数时,对自动变量也要用互斥量加以保护
D 可重入函数不可以调用不可重入函数
临界区:
指的是一个访问共用资源(同一个全局变量,同一个类对象等等)的程序片段
互斥量:
互斥锁的底层就是互斥量,使用互斥锁可以限制多个执行流对临界资源的访问时,只有一个执行流可以访问资源,其他执行流需要等待。从而保证了程序结果没有二义性
信号量:
信号量可以描述并且管理一个资源的数量, 提供wait/post
的接口来保证程序不会产生二义性结果, 同时信号量也可以保证线程同步,信号量的底层有一个资源计数器+PCB等待队列
可重入函数&不可重入函数
可重入函数:在多线程的程序当中,如果一个函数可能同一时刻被多个线程访问,没有导致程序的结果产生二义性,则该函数被称之为可重入函数
不可重入函数:在多线程的程序当中,如果一个函数可能同一时刻被多个线程访问,从而导致程序的结果产生二义性,则该函数被称之为不可重入函数
下面有关内核线程和用户线程说法错误的是?
A 用户线程因 I/O 而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会
B 内核线程只运行在内核态,不受用户态上下文的影响。
C 用户线程和内核线程的调度都需要经过内核态。
D 内核线程有利于发挥多处理器的并发优势,但却占用了更多的系统开支。
C: 用户线程调度不是都需要经过内核态
协程:协程是微线程,在子程序内部执行,可在子程序内部中断,转而执行别的子程序,在适当的时候再返回来接着执行。
简单来说可以认为协程是线程里不同的函数,这些函数之间可以相互快速切换
协程和用户态线程非常接近,用户态线程之间的切换不需要陷入内核,但部分操作系统中用户态线程的切换需要内核态线程的辅助
协程是编程语言(或者 lib)提供的特性(协程之间的切换方式与过程可以由编程人员确定),是用户态操作。协程适用于 IO 密集型的任务。常见提供原生协程支持的语言有:c++20、golang、python 等,其他语言以库的形式提供协程功能,比如 C++20 之前腾讯的 fiber 和 libco 等等
协程的切换和线程进程的切换机制是相似的(CPU 上下文与栈信息的保存与恢复),协程在切换出去的时候需要保存当前的运行状态,比如 CPU 寄存器、栈信息等等
线程与协程的区别:
(1)协程执行效率极高。协程直接操作栈基本没有内核切换的开销,所以上下文的切换非常快,切换开销比线程更小。
(2)协程不需要多线程的锁机制,因为多个协程从属于一个线程,不存在同时写变量冲突,效率比线程高。
(3)一个线程可以有多个协程。