面试准备-操作系统
参考:
- 《程序员面试笔试宝典》(何昊、叶向阳)
进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是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 函数创建一个通信端点,并返回一个引用该端点的文件描述符,…...

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

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

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

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

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

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

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

吴恩达《微调大型语言模型》笔记
微调(fine-tuning)就是利用特有数据和技巧将通用模型转换为能执行具体任务的一种方式。例如,将 GPT-3 这种通用模型转换为诸如 ChatGPT 这样的专门用于聊天的模型。或者将 GPT-4 转换为诸如 GitHub Coplot 这样的专门用于写代码的模型。 这里…...

Java中的Servlet
Java中的Servlet 在Java中,Servlet是一种用于处理Web请求的服务器端组件。Servlet生命周期是Servlet在运行时所经历的一系列阶段,每个阶段都调用特定的方法。以下是Servlet生命周期内调用的方法过程: 初始化阶段(Initialization&…...

Flutter配置Android SDK路径
在使用VSCode作为开发Flutter的工具时,当选择调试设备时,通常看不到android的模拟器,只能看到Chrome之类的。 原因就是Flutter找不到Android的SDK路径,所以无法识别模拟器,我们用flutter doctor命令检查环境时…...

jwt的基本介绍
说出我的悲惨故事给大家乐呵乐呵:公司刚来了一个实习生,老板让他写几个接口给我,我页面还没画完呢。他就把接口给我了,我敲开心,第一次见这么高效率的后端。但我很快就笑不出来了。他似乎不知道HTTP通信是无状态的。他…...

常见Vue事件修饰符浅析
一、.stop修饰符 .stop修饰符代表event.stopPropagation(),加上这个修饰符,就等于在方法中加上了这句代码。 <!--阻止单击事件继续传播--> <a click.stop"doThis"></a>上面的代码等同于如下代码。 <!--阻止单击事件继…...

怎样开始用selenium进行自动化测试?
如果您刚开始使用 Selenium 进行自动化测试,以下是建议的步骤。 1、安装 Selenium 首先,您需要安装 Selenium。Selenium 支持多种编程语言,如 Python、Java、C# 等。可以通过 pip 命令在 Python 中安装 Selenium: pip install …...

二维数组多次排序 或 嵌套list多次排序
可以排序int[ ][ ]的顺序,也可以排序List<List<Integer>> 顺序 为便于理解,以力扣原题为例:1333.餐厅过滤器 原题中给了一个双重数组,并要求返回一个List<Integer>。 方法1: 会用流的,…...

Flutter - 波浪动画和lottie动画的使用
demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新,请前往github查看最新代码 波浪动画三方库wave lottie动画 Lottie 是 Airbnb 开发的一款能够为原生应用添加动画效果的开源工具。具有丰富的动画效果和交互功能。 # 波浪动画 https://pub-web…...

忘记压缩包密码?解决方法一键找回,省时又便捷!
使用在线rar/zip解密工具,找回rar/zip密码并解密压缩包的方法非常简单。具体步骤如下:首先,在百度上搜索“密码帝官网”,这是一个专业的解密服务网站。然后,点击搜索结果中的链接,进入官网首页。在页面上方…...

“UTONMOS”掀起元宇宙游戏热潮,全球发展前景广阔
我们都知道,市面上无论是PC端的网游还是移动端手游,它如果要做到源源不断的内容输出,不仅取决于游戏公司产品质量和业绩,也与公司的决策和市场沟通密不可分。 元宇宙游戏市场受到关注 近年来,元宇宙游戏市场逐渐升温…...

用idea工具scala 和 Java开发 spark案例:WordCount
目录 一 环境准备 二 scala代码编写 三 java 代码编写 一 环境准备 创建一个 maven 工程 添加下列依赖 <dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>${spark.version}</vers…...