• 操作系统基础知识2


    一、进程管理

    1、进程与线程有什么区别

    进程是程序关于某个数据集合上的一次运行活动,它是系统进行资源分配和调度的一个独立单位。

    线程是进程的一个实体,是CPU 调度和分配的基本单位,线程基本上不拥有系统资源。

    区别如下:

    a、一个线程必定属于也只能属于一个进程;而一个进程可以拥有多个线程并且至少拥有一个线程。

    b、属于一个进程的所有线程共享该线程的所有资源,包括打开的文件、创建的Socket 等。不同的进程互相独立。

    c、线程又称为轻量级进程。

    d、进程是程序的一次执行,线程可以理解为程序中一段程序片段的执行。

    e、每个进程拥有独立的内存空间,而线程共享其所属进程的内存空间。

    2、线程同步有哪些机制?

    现在流行的进程线程同步互斥的控制机制,其实是由最原始、最基本的4 种方法:临界区、互斥量、信号量和事件。

    3、内核线程和用户线程的区别

    根据操作系统内核是否对线程可感知,可以把线程分为内核线程和用户线程。

    内核线程建立和销毁都是由操作系统负责、通过系统调用完成的,操作系统在调度时,参考各进程内的线程运行情况作出调度决定。

    用户进程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,用户进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。

    二、内存管理

    1、内存管理有哪几种方式

    常见的内存管理方式有块式管理、页式管理、段式管理、段页式管理。

    2、分段和分页的区别是什么?

    页是信息的物理单位,分页是为了实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说分页仅仅是由于系统管理需要,而不是用户的需要。

    段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。

    分页的作业地址空间是唯一的,即单一的线性空间,表示一地址;分段的作业地址空间是二维的,程序员在标识一个地址时,既需要给出段名,又需要给出段内地址。

    3、什么是虚拟内存?

    虚拟内存简称虚存,是计算机系统内存管理的一种技术。它是相对物理地址而言的,可以理解为“假的“内存。

    它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),允许程序员编写并运行比实际系统拥有的内存大得多的程序,这使得许多大型软件项目能够在具有有限内存资源的系统上实现。而实际上,它通常被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

    虚存比实存有以下好处:

    a、扩大地址空间

    b、内存保护

    c、公平分配内存

    d、当进程需要通信时,可采用虚存共享的方式实现

    4、什么是内存碎片?什么是内碎片?什么是外碎片?

    内存碎片是由于多次进行内存分配造成的。当进行内存分配时,内存格式一般为(用户使用段)(空白段)(用户使用段),当空白段很小的时候可能不能提供给用户足够多的空间时,这些很小的空隙叫碎片。

    内碎片:分配给程序的存储空间没用完,有一部分是程序不使用,但其他程序也没法使用的空间。

    外碎片:由于空间太小,小到无法给任何程序分配(不属于任何进程)的存储空间。

    5、虚拟地址、逻辑地址、线性地址、物理地址有什么区别?

    虚拟地址:是指由程序产生的有段选择符和段内偏移地址组成的地址。

    逻辑地址:指由程序产生的段内偏移地址。有时直接把逻辑地址当成虚拟地址,两者并没有明确的界限。

    线性地址:指虚拟地址到物理地址变换之间的中间层,是处理器可寻址的内存空间(称为线性地址空间)中的地址。

    物理地址:是指现在CPU 外部地址总线上寻址物理内存的地址信号,是地址变换的最终结果。

    6、Cache 替换算法有哪些?

    Cache 替换算法有随机算法、FIFO算法、近期最少使用算法(Least Recently Used,LRU算法)、LFU算法(近期最少访问算法)、OPT算法(最优替换算法)

    三、用户编程接口

    1、库函数调用与系统调用有什么不同?

    库函数调用时语言或应用程序的一部分,它是高层的,完全运行在用户空间,为程序员提供调用真正的在幕后完成实际事务的系统调用接口;

    而系统函数是内核提供给应用程序的接口,属于系统的一部分。函数库调用是语言或应用程序的一部分,而系统调用时操作系统的一部分。

    2、静态链接与动态链接有什么区别?

    静态链接是指把要调用的函数或者过程直接链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的嗲吗就在程序的exe文件中,该文件包含了运行时所需要的全部代码。静态链接的缺点就是当多个程序都调用相同函数时,内存中就会出现这个函数的多个拷贝,造成内存的浪费。

    动态链接是相对静态链接而言的,动态链接所调用的函数并没有被复制到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息。仅当应用程序被装入内存开始运行时,在操作系统的管理下,才在应用程序与相应的动态链接库(dynamic link library ,dll)之间建立链接关系。

    3、静态链接库与动态链接库有什么区别?

    静态链接库就是使用.lib 文件,库中的代码最后需要链接到可执行文件中去,所以静态链接的可执行文件一般比较大一些。

    动态链接库是一个包含可由多个程序同时使用的代码和数据的库,它包含函数和数据结构的模块的集合。程序文件在运行时才会加载这些模块。

    它们的相同点是它们都实现了代码的共享。

    不同点是静态链接库 lib 中的代码被包含在调用的exe 文件中,该lib 中不能再包含其他动态链接库或者静态链接库了。而动态链接库dll 可以被调用的exe 动态的”引用“ 和 “卸载”,该 dll 中可以包含其他动态链接库或者静态链接库。

    4、用户态和核心态有什么区别?

    用户态与核心态势操作系统的两种运行级别,它用于区分不同程序的不同权利。

    核心态就是拥有资源多的状态,或者说访问资源多的状态,也称为特权态。

    相对来说用户态状态下访问资源就会受到限制。

    Intel CPU提供Ring0 ~Ring 4 4种级别的运行模式。

    5、用户栈和内核栈有什么区别?

    栈是系统运行在内核态的时候使用的栈,用户栈是系统运行在用户态时候使用的栈。

    当进程由于中断进入内核态时,系统会把一些用户态的数据信息保存到内核栈中,当返回到用户态时,取出内核栈中得信息恢复出来,返回到程序原来执行的地方。
    用户栈就是进程在用户空间时创建的栈,比如一般的函数调用,将会用到用户栈。

    内核栈是属于操作系统空间的一块固定区域,可以用于保存中断现场、保存操作系统子程序间相互调用的参数、返回值等。

    用户栈是属于用户进程空间的一块区域,用户保存用户进程子程序间的相互调用的参数、返回值等。

  • 相关阅读:
    抽取一个简单的按钮方法
    一些iOS笔试题目
    使用第三方框架 Masonry 实现自动布局
    AutoLayout适配
    iOS面试小题集锦
    大牛们的技术博客
    5、过滤流
    3、过滤文件夹
    1、File类简介
    贪婪模式和非贪婪模式
  • 原文地址:https://www.cnblogs.com/byqh/p/5595379.html
Copyright © 2020-2023  润新知