电话面试1 20160323_1916_18min

1、什么是虚拟内存?

(以下答案摘自hfm_honey学习乐园)

物理内存,在应用中,自然是顾名思义,物理上,真实的插在板子上的内存是多大就是多大了。而在CPU中的概念,物理内存就是CPU的地址线可以直接进行寻址的内存空间大小。比如8086只有20根地址线,那么它的寻址空间就是1MB,我们就说8086能支持1MB的物理内存,即使我们安装了128M的内存条在板子上,我们也只能说8086拥有1MB的物理内存空间。同理我们现在大部分使用的是32位的机子,32位的386以上CPU就可以支持最大4GB的物理内存空间了。

先说说为什么会有虚拟内存和物理内存的区别。正在运行的一个进程,他所需的内存是有可能大于内存条容量之和的,比如你的内存条是256M,你的程序却要创建一个2G的数据区,那么不是所有数据都能一起加载到内存(物理内存)中,势必有一部分数据要放到其他介质中(比如硬盘),待进程需要访问那部分数据时,在通过调度进入物理内存。所以,虚拟内存是进程运行时所有内存空间的总和,并且可能有一部分不在物理内存中,而物理内存就是我们平时所了解的内存条。有的地方呢,也叫这个虚拟内存为内存交换区。关键的是不要把虚拟内存跟真实的插在主板上的内存条相挂钩,虚拟内存它是“虚拟的”不存在,假的啦,它只是内存管理的一种抽象!

那么,什么是虚拟内存地址和物理内存地址呢。假设你的计算机是32位,那么它的地址总线是32位的,也就是它可以寻址0~0xFFFFFFFF(4G)的地址空间,但如果你的计算机只有256M的物理内存0x~0x0FFFFFFF(256M),同时你的进程产生了一个不在这256M地址空间中的地址,那么计算机该如何处理呢?回答这个问题前,先说明计算机的内存分页机制

计算机会对虚拟内存地址空间(32位为4G)分页产生页(page),对物理内存地址空间(假设256M)分页产生页帧(page frame),这个页和页帧的大小是一样大的,所以呢,在这里,虚拟内存页的个数势必要大于物理内存页帧的个数。在计算机上有一个页表(page table),就是映射虚拟内存页到物理内存页的,更确切的说是页号到页帧号的映射,而且是一对一的映射。但是问题来了,虚拟内存页的个数大于物理内存页帧的个数,岂不是有些虚拟内存页的地址永远没有对应的物理内存地址空间?不是的,操作系统是这样处理的。操作系统有个页面失效(page fault)功能。操作系统找到一个最少使用的页帧,让他失效,并把它写入磁盘,随后把需要访问的页放到页帧中,并修改页表中的映射,这样就保证所有的页都有被调度的可能了。这就是处理虚拟内存地址到物理内存的步骤。

现在来回答什么是虚拟内存地址和物理内存地址。虚拟内存地址由页号(与页表中的页号关联)和偏移量组成。页号就不必解释了,上面已经说了,页号对应的映射到一个页帧。那么,说说偏移量。偏移量就是我上面说的页(或者页帧)的大小,即这个页(或者页帧)到底能存多少数据。举个例子,有一个虚拟地址它的页号是4,偏移量是20,那么他的寻址过程是这样的:首先到页表中找到页号4对应的页帧号(比如为8),如果页不在内存中,则用失效机制调入页,否则把页帧号和偏移量传给MMU(CPU的内存管理单元)组成一个物理上真正存在的地址,接着就是访问物理内存中的数据了。总结起来说,虚拟内存地址的大小是与地址总线位数相关,物理内存地址的大小跟物理内存条的容量相关。

最后我自己来总结一下:
1)对计算机而言,物理内存的大小即主板上插着的内存条的大小;对CPU而言,的物理内存的大小即CPU上地址线可寻址的大小。
2)虚拟内存即某个程序运行时所创建的数据区,它的大小可能大于物理内存,它是一种内存管理上的抽象。
3)由于虚拟内存很可能大于物理内存,所以操作系统使用一种内存分页机制,将虚拟内存分成多个页(page),将物理内存分成多个页帧(page frame),页和页帧的大小相同。现使用的虚拟内存页将会通过页表(page table)映射到物理内存页帧上,显然实时映射的范围最大只能是物理内存的大小范围。如果现需使用的某个虚拟内存页没有处于这个映射当中,则操作系统使某个使用较少的页帧失效,并将该页帧的内容存入其他媒介当中(比如磁盘),然后在该页帧的物理内存和需要空间的虚拟内存页映射起来。
4)虚拟内存地址由页号(与页表中的页号关联)和偏移量组成。

2、debug断点的原理

每生成一个断点相当于插入一个int 3汇编指令,调试时,程序遇到这条指令后则会停在那里,将相关变量传给调试线程。

3、进程和线程的区别

线程是指进程内的一个执行单元,也是进程内的可调度实体.
与进程的区别:
(1)地址空间:线程是进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(内存资源);
(3)线程是处理器调度的基本单位,但进程不是;
4)二者均可并发执行;

4、MFC handler作用

句柄,像水杯的杯柄一样,获得了某个对象的句柄,即可对这个对象进行相关操作。

5、矩阵键盘

行选,列选

6、串口通信是一对多的吗

串口可以异步全双工通信,可以一对多

7、串口通信的话怎么校验?

两台设备之间的校验,可以通过像三次握手一样发送应答;收到的数据是否正确,可以通过奇偶校验,也可以预定好一个校验公式,在发送数据时插入到数据尾,然后收数据时根据数据来算一这个校验公式,然后将结果和数据位的结果对比。

8、TCP/IP协议三次握手,四次挥手

参见我的一篇博客戏说 TCP 三次握手 四次挥手

9、不同系统的字节序知道吗

不同cpu不同操作系统的字节序不同,网络字节序为大端字节序,即高位数据在低位地址,低位数据在高位地址。

使用htons,可以将一个unsigned short型数据的主机字节序换成网络字节序,如果这个主机字节序是小端字节序,则htons会进行转换成大端字节序,如果这个主机字节序本身是大端字节序,也htons函数会被定义成空。

你可能感兴趣的:(多线程,面试,三次握手,虚拟内存,电话面试)