• 0506操作系统和数据结构


    1.操作系统的功能

    • 接口:为用户提供使用接口
    • 管理:进程管理、内存管理、设备管理、文件管理
    • 抽象:抽象计算机硬件资源

    2.操作系统的特点

    • 并发:进程并发执行
    • 共享:内存中并发的进程共享系统资源
    • 虚拟:通过某种技术将一个物理实体转化成为若干个逻辑上的对应物
    • 异步:进程推进的速度不可预知

    3.进程、程序和线程的概念以及区别

    • 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空 间,即进程空间或(虚空间)。
    • 线程,在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是行不通的,——无论是从系统资源开销方面或是响应用户请求的效率方面来看。因此,操作系统中线程的概念便被引进了。线程,是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,也是 CPU 调度的一个基本单位。
    • 程序,是计算机指令的集合,是静态的。

    4.进程死锁发生的四个必要条件

    • 互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。
    • 不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放。
    • 请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。
    • 循环等待条件:在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路,环路中每一个进程所占有的资源同时被另一个申请,也就是前一个进程占有后一个进程所深情地资源。

    5.银行家算法的思想以及它属于什么死锁策略

    • 避免死锁
    • 在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。一个进程请求资源,算法先对其进行判断,对比该进程的需求向量以及可用资源向量,如果满足请求则分配给他进行安全性算法。安全性算法则将资源按照一定顺序进行分配,如果找到一个顺序使得每个进程都可以得到其需求资源,则认为安全,可以分配,找不到则不分配。

    6.输入一个链表的头结点,从尾到头打印链表每一个结点的值。

    • 思路:从头结点开始,每经过一个结点,就将其放入栈中,当遍历完整个链表后,从栈顶逐个输出节点的值。
    • 时间复杂度O(n)
    • 空间复杂度O(n)

    7.快排算法以及其时间复杂度

    • 思路:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
    • 时间复杂度:平均O(nlogn),最坏情况下会退化成冒泡排序O(n*n)
    • 空间复杂度:递归栈,O(logn)

    8.内存中的堆和栈的概念以及数据结构中的堆和栈的概念以及区别

    • 数据结构中:逻辑上的数据存储结构,栈是一种操作受限的线性表,只允许一端进出,先进后出。栈分为顺序栈和链式栈,顺序栈使用数组实现,地址空间连续,链式栈使用链表实现,地址空间不连续。堆是一种特殊的完全二叉树,堆分为大顶堆和小顶堆。
    • 内存中:物理内存中真实存在的,内存空间在逻辑上分为三个区,代码区、静态数据区和动态数据区。代码区则存放方法体的二进制代码等,静态数据区存放全局变量,静态变量,常量,系统进行自动分配和回收,而动态数据区分为堆区和栈区,栈区存储运行方法的形参局部变量、返回值,系统自动分配和回收,堆区则是new一个对象时的引用或者地址存储在栈区,指向该对象存储在堆区的真实数据,需要程序员进行分配和释放(比如malloc分配动态内存之后,需要进行free,否则会产生内存泄漏)

    9.使用链表实现LRU缓存淘汰算法

    • LRU算法:即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。
    • 算法思路:一个有序链表,越靠近链表尾部的结点是越早之前访问的,当有一个数据被访问是,从头到尾遍历列表,如果此数据之前已经被缓存在链表中了,我们遍历得到对应的结点,并将其从原来的位置删除,然后再插入到链表的头部。如果没有在缓存链表中,分为两种情况,一是缓存未满,则将其插入到链表头部,二是缓存已满,则将链表尾部删除,将新的数据插入到链表的头部。

    10.图的深度优先遍历算法的思想

    • 深度优先遍历图的方法是,从图中某顶点v出发:
    (1)访问顶点v;
    (2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;

    (3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。

    时间复杂度:采用矩阵存储O(n*n),采用链表存储O(n+e),n个点,e条边

    空间复杂度:矩阵存储O(n*n),链表存储O(n)

     

  • 相关阅读:
    CodeForces 659F Polycarp and Hay
    CodeForces 713C Sonya and Problem Wihtout a Legend
    CodeForces 712D Memory and Scores
    CodeForces 689E Mike and Geometry Problem
    CodeForces 675D Tree Construction
    CodeForces 671A Recycling Bottles
    CodeForces 667C Reberland Linguistics
    CodeForces 672D Robin Hood
    CodeForces 675E Trains and Statistic
    CodeForces 676D Theseus and labyrinth
  • 原文地址:https://www.cnblogs.com/helloworldToDu/p/12839122.html
Copyright © 2020-2023  润新知