程序员面试笔试宝典学习记录(五)(操作系统相关知识)
程序,进程和线程。
程序,一组指令的有序集合。
进程,具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单元。
线程,进程的一个实体,是CPU调度和分派的基本单元,是比进程更小的能独立运行的基本单元。本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈)。一个线程可以创建和撤销另一个线程,同一个进程的多个线程之间可以并发执行。
线程同步的机制。最原始,最基本的种方法:临界区,互斥量,信号量和事件。
(a)临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。
(b)互斥量:为协调共同对一个共享资源的单独访问而设计,只有拥有互斥对象的线程才有权去访问系统的公共资源,因为互斥对象只有一个,所以能够保证资源不会同时被多个线程访问,互斥不仅能实现同一个应用程序的公共资源安全共享,还能够实现不同应用程序的公共资源共享。
(c)信号量:为控制一个具有有限数量的用户资源设计。它允许多个线程在同一个时刻去访问同一个资源,但一般需要限制同一时刻访问此资源的最大线程数目。
(d)事件:用来通知线程有一些事件已经发生,从而启动后继任务开始。
内核线程(操作系统内核支持的多线程)和用户线程(不需要内核支持,外部线程库支持)
内存管理方式:块式管理,页式管理,段式管理和段页式管理,最常用的是段页式管理,结合页式管理和段式管理的优点。
虚拟地址是指由程序产生的由段选择符和段内偏移地址组成的地址,这两部分组成的地址并没有直接访问物理内存,而是通过分段地址的变换处理后才会对应到相应的物理内存地址。
逻辑地址指由程序产生的段内偏移地址,有时直接把逻辑地址当成虚拟地址,两个并没有明确的界限。
线性地址是指虚拟地址到物理地址变换之间的中间层,是处理器可寻址的内存空间(称为线性地址空间)中的地址。如果启用了分页机制,那么线性地址可以再经过变换产生物理地址。若未开启,那么线性地址就是物理地址。
逻辑地址(段表)-》线性地址(页表)-》物理地址。
Cache替换算法有随机算法,FIFO算法,LRU算法,LFU算法和OPT算法。
静态链接是指把要调用的函数或者过程直接链接到可执行文件中,称为可执行文件的一部分。
动态链接是相对于静态链接而言的,动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息。
静态链接库和动态链接库的相同点他们都实现了代码的共享。不同点是静态链接库lib中的代码被包含在调用的exe文件中,该lib中不能再包含其他动态链接库或者静态链接库了。而动态链接库dll可以被调用的exe的动态的”引用“和”卸载“,该dll中可以包含其他动态链接库或静态链接库。
内核态和用户态,内核堆栈和用户堆栈。