当前位置: 首页 > news >正文

面试准备-操作系统

参考:

  1. 《程序员面试笔试宝典》(何昊、叶向阳)

进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是cpu调度和分配的基本单位。线程基本不拥有系统资源,只拥有必须的,但是同属于一个进程的其他线程可以共享进程所拥有的全部资源。

引入线程的4个优点:1)易于调度2)提高并发性3)开销小4)充分发挥多处理器的功能(每个线程都在一个处理器上运行,有助于并行)

线程与进程的区别?

1)一个线程只能属于一个进程,一个进程可以有多个线程,并且至少有1个

2)属于一个进程的所有线程共享进程的所有资源,不同进程相互独立

3)线程又称为轻量级进程,线程之前切换代价小,进程之间切换代价大

4)进程是程序的一次执行,线程可以理解为程序中一段程序片段的执行

5)每个进程有独立的内存空间,而线程共享其所属进程的内存空间

线程同步机制?

1)临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问

2)互斥量:只有拥有互斥对象的线程才有权限去访问系统的公共资源。因为互斥对象只有一个,所以能保证资源不会被多个线程访问

3)信号量:它允许多个线程在同一个时刻去访问同一个资源,但是会限制同一时刻访问该资源的最大线程数目

4)事件:用来通知线程有一些事件已经发生,从而启动后继任务

内核线程:操作系统内核可感知的线程

用户线程:是在用户程序中实现的线程。unix系统

用户线程的优点:(内核线程的优缺点与之相反、os可以使用混合方式实现线程)

1)可以在不支持线程的os中实现

2)创建和销毁线程、线程切换等线程管理的代价小

3)允许每个进程定制自己的调度算法,线程管理很灵活

4)线程能利用的表空间和堆栈空间比内核线程多

缺点

1)同一进程中只能同时有一个线程在运行,如果有一个线程使用了系统调用而阻塞,那么整个进程都会被挂起

2)页面失效也会产生类似的问题

内存管理的方式:

1)块式管理:把主存分成一大块一大块的,当所需的程序片段不在主存时就分配一块主存空间,将程序片段load入。这样易于管理但是浪费空间

2)页式管理:把主存分成一页一页(比块式小),提高空间利用率

3)段式管理:把主存分段(比页小),这样提高空间利用率但是一个程序片段可能会分成几十段,导致计算每段的物理地址时浪费时间

4)段页式管理:先把主存分成若干段,每段再分页。段页式管理没取一次数据,要访问3次内存

分段和分页的区别:

1)页是信息的物理单位,分页是出于管理系统的需要;段是信息的逻辑单位,它含有一组意义相对完整的信息,分段是出于用户需要。

2)页的大小固定且由系统确定,将逻辑地址分为页号和页内地址两部分,是由机器硬件实现的。段的长度不固定,取决于用户编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。

3)分页的作业地址空间是单一的线性空间,分段的作业地址空间是二维的,需要给出段名+段内地址

虚拟内存:它使得应用程序认为它拥有一个连续完整的地址空间,允许程序员编写并运行比实际系统拥有的内存大得多的程序。实际上,它通常被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘上,在需要时进行数据交换。

虚拟内存比实存的好处:

1)扩大地址空间:寻址空间比实际大

2)内存保护:每个进程运行在各自的虚拟内存地址空间,互不干扰。虚存还对特定的内存地址提供写保护,防止代码或数据被恶意篡改

3)公平分配内存:每个进程相当于有同样大小的虚存空间

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

坏处:

1)虚存管理需要建立很多数据结构,而数据结构要占用额外的内存

2)虚拟地址到物理地址的转换,增加了指令的执行时间

3)页面的换入换出需要磁盘IO,耗时

4)如果一页中只有一部分数据,会浪费内存

内存碎片:是由多次进行内存分配造成的。很多空白段因为太小,不能满足用户需求而被放弃,这些小的空白段就是碎片

内碎片:是处于区域内部或页面内部的存储块,占用这些区域的进程不使用这个存储块,系统页因为进程在占有,无法使用,需要等到进程释放或结束。

外碎片:一些不属于任何进程的、因为太小且地址不连续导致系统无法分配给其他进程的空闲存储块。一般处于已分配区域或页面外部

一种特定的内存分配算法,很难同时解决内碎片和外碎片问题,只能根据应用特点进行取舍。

虚拟地址:是指由程序产生的、由段选择符和段内偏移地址组成的地址。不能直接访问物理内存,需要通过分段地址的变换处理才行

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

逻辑地址:是由程序产生的段内偏移地址。有时候直接把逻辑地址当成虚拟地址

线性地址:是指虚拟地址到物理地址变换之间的中间层,是处理器可寻址的内存空间(即线性地址空间)中的地址。如果启用了分页机制,线性地址再变换就产生物理地址,否则线性地址就是物理地址。

不同的逻辑地址可以映射到同一个线性地址上,不同的线性地址页可以映射到同一个物理地址上。

cache的替换算法:

1)随机算法RAND:随机产生一个要替换的块号,替换出去。优点:简单、容易实现、没有使用”历史经验“,因此不能提高cache命中率(正好读到有用的信息=命中)

2)先进先出FIFO:将最早进入Cache的子块替换。优点:容易实现,系统开销小;缺点:可以替换掉早来但常用的程序块,页不能提高命中率

3)最近最久未使用算法LRU:least recently used,字面意思,但也不能保证过去不常用的未来也不常用,而且实现复杂,开销大。常用的方法有:计数器法、寄存器栈法、硬件逻辑比较对法

4)最优替换算法OPT:OPTimal replacement。要实现的话是先让程序跑一遍,记录下实际的页地址流情况,根据这个找出它需要替换的页面。但这是理想型算法,可以作为评估标准,哪个的命中率与其相近就是好的

5)最近最少使用LFU:least frequently used 选择近期最少最少访问的页面作为被替换的页面。需要为每个页面设置一个很长的计数器,并且选择一个固定的时钟为每个计数器计数,在选择时,要从所有计数器中找到计数值最大的计数器。实现复杂

库函数调用是语言或者应用程序的一部分,运行在用户空间(如c库的system malloc)。系统调用是os的一部分,是在内核空间执行的,因此调用时需要把上下文环境切换到内核模式(如chdir write)。

静态链接是把要调用的函数直接链接到可执行文件中,所以一个exe文件会包含所需的所有代码。而动态链接没有拷贝所需代码,只写了所调用函数的描述信息,只有当应用程序被装入内存开始运行时,才会在应用程序和动态链接库(dll, dynamic link library)之间建立链接,os才能去执行dll中对应的代码。所以前者的exe可以拷贝到别的机子运行,后者未必可以,因为要保证dll存在+版本正确。

静态链接库:.lib (不能包含其他dll或lib)

动态链接库:.dll(能包含其他dll或lib)

核心态与用户态:当CPU处于核心态时,可以随时进入用户态;当CPU处于用户态时,只有系统调用和中断时才能切换到核心态。一般程序一开始都是运行于用户态,当程序需要使用系统资源时,就通过调用软中断进入核心态。

运行在核心态的程序可以访问的资源多,但是可靠性、安全性要求高,管理和维护比较复杂;用户态程序访问的资源有限,但是要求低,维护简单。

核心态实现的功能:CPU管理和内存管理、诊断和测试程序、输入输出管理、文件系统本身的管理。但用户数据的管理、编译器、网络管理的部分功能等都可以放在用户态

内核在创建进程时,会为进程创建相应的堆栈。每个进程都有一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,CPU堆栈指针寄存器里面的内容都是用户堆栈的地址;否则是内核栈空间地址。当进程陷入内核态时,进程所用的堆栈要从用户栈转到内核栈。此时先把用户态堆栈的地址保存在内核栈中(此时内核栈总是空的),然后将寄存器内容改为内核栈的地址。恢复到用户态时,直接恢复之前保存的用户栈地址。

相关文章:

面试准备-操作系统

参考: 《程序员面试笔试宝典》(何昊、叶向阳) 进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是cpu调度和分配的基本单位。线程基本不拥有系统资源,只拥有必须的,但是同属于一个进程…...

深度学习基础知识 Batch Normalization的用法解析

深度学习基础知识 Batch Normalization的用法解析 import numpy as np import torch.nn as nn import torchdef bn_process(feature, mean, var):feature_shape feature.shapefor i in range(feature_shape[1]):# [batch, channel, height, width]feature_t feature[:, i, :,…...

Centos7安装MongoDB7.xxNoSQL数据库|设置开机启动(骨灰级+保姆级)

一: mongodb下载 MongoDB 社区免费下载版 MongoDB社区下载版 [rootwww tools]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-7.1.0-rc4.tgz 二: 解压到指定目录 [rootwww tools]# mkdir -p /usr/local/mongodb [rootwww tools]# tar -zxvf mongodb-…...

JDK、JRE、JVM三者之间的关系

1.JDK 基本介绍 1) JDK 的全称 (Java Development Kit Java 开发工具包 ) JDK JRE java 的开发工具 [java, javac,javadoc,javap 等 ] 2) JDK 是提供给 Java 开发人员使用的,其中包含了 java 的开发工具,也包括了 JRE 。所以安装了 JDK ,就…...

【ppt技巧】批量修改ppt中的字体

PPT文件中的字体想要全部更换,有什么方便的方法吗?今天分享两个方法,一键修改ppt文件字体。 方法一: 找到功能栏中的编辑选项卡,点击替换 – 替换字体,在里面选择我们想要替换的字体就可以了。 方法二&am…...

RustDay01——运行在线GitHub Rust环境

1.跟着教程进入GitHub教室 2. 授权确认后进入学习空间 3.点击链接进入在线平台 4.添加本机密钥对到GitHub 5. 安装依赖 我们使用在线的Linux试验平台,就自动帮我们clone好了仓库 我们直接在仓库目录执行 cargo install --force --path . 安装依赖 PS:其实刚开始…...

上门按摩小程序|同城上门按摩软件开发|上门按摩系统;

上门按摩小程序的开发具有许多优势,下面就给大家介绍下按摩小程序功能: 上门按摩小程序的优势 方便快捷:上门按摩小程序提供在线预约服务,用户可以通过手机随时随地预约按摩师上门服务,避免了传统预约方式的繁琐和不确定性。 个性…...

rpm安装mysql8后碰到的问题

1 mysqld 无法启动 原因 已经使用了3306端口,修改my.cnf中端口为3308 2 修改为3308端口后,还是无法启动, 2023-10-07T02:20:10.096689Z 0 [ERROR] [MY-010262] [Server] Cant start server: Bind on TCP/IP port: Permission denied 2023…...

Linux 磁盘管理+实例

目录 一、文件系统 二、添加磁盘 三、查看磁盘信息(块设备) 四、分区 1、格式 1)MBR分区 2)GPT分区 2、管理分区 1)使用fdisk 2)使用gdisk 3)使用parted a.交互式 b.非交互式 3、…...

MongoDB——centOS7安装mongodb5.0.21版本服务端(图解版)

目录 一、mongodb官网下载地址二、安装步骤2.1、上传安装包并解压2.2、配置环境变量2.3、创建目录并授权2.4、创建配置文件2.5、启动MongoDB 三、开放端口四、客户端连接 一、mongodb官网下载地址 mongodb官网下载地址:https://www.mongodb.com/try/download/commu…...

C#实现OPC DA转OPC UA服务器

运行软件前提前安装好OPC运行组件: 为方便演示,提前准备好了一个DAServer服务器: 接下来开始配置: 该软件主要实现的功能如下: 配置过程也相对简单: 第一步: 编辑如下文件: 第二步…...

TCP/IP网络协议通信函数接口

创建套接字函数 socket 【头文件】 #include <sys/types.h> #include <sys/socket.h> 【函数原型】 int socket(int domain, int type, int protocol); 【函数功能】 socket 函数创建一个通信端点&#xff0c;并返回一个引用该端点的文件描述符&#xff0c;…...

go语言判断管道是否关闭的误区

前言 本文是探讨的是"在Go语言中&#xff0c;我们是否可以使用读取管道时的第二个返回值来判断管道是否关闭?" 样例 在Go语言中&#xff0c;我们是否可以使用读取管道时的第二个返回值来判断管道是否关闭? 可以看下面的代码 package mainimport "fmt"…...

如何轻松使用 ChatGPT 进行论文大纲和创作

ChatGPT能够编写复杂的代码、博客文章等&#xff0c;它可以帮助我们做很多事情。今天本篇文章分享的主要内容如何利用 ChatGPT 来撰写论文文章。下面会介绍如何轻松使用 ChatGPT 进行论文大纲和创作&#xff01; 1、使用 ChatGPT 确定主题 文章非常重要的一个部分就是主题。如…...

【深蓝学院】手写VIO第6章--视觉前端--笔记

第5章相关内容&#xff0c;还是CSDN的传统Markdown编辑器好用。 视觉前段在14讲课程中已经讲过&#xff0c;这里再简单复习一下。 1. 前端工作的定性比较&#xff0c;分析 这一节讲了很多关于前端的方法框架的对比讨论&#xff0c;后面看完了相关的论文之后强烈建议再回来听一…...

用例图 UML从入门到放弃系列之三

1.说明 关于用例图&#xff0c;这篇文章我将直接照搬罗伯特.C.马丁老爷子在《敏捷开发》一书种的第17章&#xff0c;并配上自己的理解&#xff0c;因为这一章写的实在是太精彩了&#xff0c;希望能够分享给大家&#xff0c;共勉。以下是老爷子的原文中文翻译以及豆芽的个人解读…...

NLP大模型

大模型 1、大模型的模型结构 一般指一亿参数以上的模型。 目前以Transformer为基础自回归生成大致可以分为三种架构: Encoder-only的模型,如BERT Encoder-Decoder的模型,如T5。 Decoder-Only的模型,如GPT系列。...

Python- 将一个字符串列表连接成一个单独的字符串

Python中一个常用的技巧&#xff1a;将一个字符串列表连接成一个单独的字符串。 ,.join(list) 是使用Python的 str.join() 方法。 详细解析&#xff1a; join() 方法: 是一个字符串方法&#xff0c;意味着在一个字符串上调用它。它需要一个参数&#xff0c;通常是一个列表或任…...

深眸科技自研AI视觉分拣系统,实现物流行业无序分拣场景智慧应用

在机器视觉应用环节中&#xff0c;物体分拣是建立在识别、检测之后的一个环节&#xff0c;通过机器视觉系统对图像进行处理&#xff0c;并结合机械臂的使用实现产品分类。 通过引入视觉分拣技术&#xff0c;不仅可以实现自动化作业&#xff0c;还能提高生产线的生产效率和准确…...

吴恩达《微调大型语言模型》笔记

微调&#xff08;fine-tuning&#xff09;就是利用特有数据和技巧将通用模型转换为能执行具体任务的一种方式。例如&#xff0c;将 GPT-3 这种通用模型转换为诸如 ChatGPT 这样的专门用于聊天的模型。或者将 GPT-4 转换为诸如 GitHub Coplot 这样的专门用于写代码的模型。 这里…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...