1:进程和线程有什么区别:
进程是系统进行资源调度和分配的基本单位。用于实现操作系统的并发。

线程是进程的子任务,是cpu调度和分配的基本单位。用于实现进程的并发。

一个线程只能属于一个进程,一个进程可以有多个线程。

进程在执行过程中,拥有独立的内存单元。而多个线程共享进程的内存。共享代码段(代码和常量)、数据段(全局变量和静态变量)、扩展段(堆)。但是每个线程拥有自己的栈段,用来存放自己的局部变量和临时变量。

进程切换的开销大于线程切换的开销:线程切换只需要保存和设置少量寄存器内容,而进程的切换涉及当前整个CPU、内存、IO环境的设置。

2:进程、线程的通信方式

进程的通信方式: https://www.jianshu.com/p/c1015f5ffa74。

线程的通信方式:可以直接读写进程的数据段、栈段的数据,此时需要进程进行同步、互斥的手段加以辅助。

3:进程调试简单,创建开销大;线程调试复杂,创建开销小

4:进程间不会相互影响,而线程一个挂掉就会导致整个进程挂掉

5:进程适合多核、多机分布。线程适用于多核

6:进程间通信:包括管道、系统IPC(消息队列、信号量、信号、共享内存)、以及套接字socket

普通管道:pipe : 半双工(数据只能在一个方向上流动,先进先出),只能用于具有亲缘关系的进程之间的通信(父子进程),可以看做是一种特殊的文件,只存在于内存中

命名管道:fifo : 半双工(数据只能在一个方向上流动,先进先出),可以用于无关进程之间数据通信,可以看做特殊文件,存在于文件系统中

消息队列:进程可以读取,独立于进程启停,进程终止时消息队列及其内容不会被删除。消息队列可以实现消息的随机查询,不一定先进先出,可以按照消息类型读取。

共享内存:多个进程可以访问、存取、操作同一块内存空间。需要依赖互斥锁和同步量

套接字: 进程间的通信机制,不仅可以用于本地,也可以用于不同主机之间的进程通信

7:多线程、线程的同步的几种方式

多线程可以实现进程内部的并发,线程之间的通信方式:

(1):临界区:通过多线程的串行化来访问公共资源或一段代码。

(2):互斥量(锁):互斥对象只有一个,保证公共资源不会被多个线程同时访问

(3):信号量: 容许多个线程在同一时刻去访问同一个资源,但要限制最大线程数目

(4):事件(wait、notify):通过通知操作的方式来保持线程的同步。

8: 互斥锁和读写锁的区别:
https://blog.csdn.net/Melo0705/article/details/109150149?spm=1001.2014.3001.5501

9:进程的状态转换:

进程的五种基本状态

(1)创建状态:进程正在被创建

(2)就绪状态:进程加入到就绪队列中等待CPU调度

(3)执行转态:进程正在运行

(4)等待阻塞状态:进程因为某种原因,比如I/O等待,等待设备,而暂时不能运行

(5)终止状态:进程运行完毕

10: 同步、异步、阻塞、非阻塞

https://blog.csdn.net/weixin_30508309/article/details/96400360

同步,就是我调用一个功能,该功能没有结束前,我死等结果。
 异步,就是我调用一个功能,不需要知道该功能结果,该功能有结果后通知我(回调通知)
 阻塞,      就是调用我(函数),我(函数)没有接收完数据或者没有得到结果之前,我不会返回。
 非阻塞,  就是调用我(函数),我(函数)立即返回,通过select通知调用者

同步:提交请求->等待服务器处理->处理完毕返回这个期间客户端浏览器不能干任何事
异步:请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

同步和异步都只针对于本机SOCKET而言的。

同步和异步,阻塞和非阻塞,有些混用,其实它们完全不是一回事,而且它们修饰的对象也不相同。
阻塞和非阻塞是指当进程访问的数据如果尚未就绪,进程是否需要等待,简单说这相当于函数内部的实现区别,也就是未就绪时是直接返回还是等待就绪;

而同步和异步是指访问数据的机制,同步一般指主动请求并等待I/O操作完毕的方式,当数据就绪后在读写的时候必须阻塞(区别就绪与读写二个阶段,同步的读写必须阻塞),异步则指主动请求数据后便可以继续处理其它任务,随后等待I/O,操作完毕的通知,这可以使进程在数据读写时也不阻塞。(等待"通知")

11: 内存溢出和内存泄漏

(1)内存溢出:你要的内存空间超过了实际分配的内存空间。造成原因:读取数据量太大,对象使用完未清空,代码死循环导致溢出、三方bug

(2) 内存泄漏:程序没有释放不在使用的内存。造成原因:堆内存泄漏(Heap leak)malloc、new等从堆中分配的内存空间,完成使用后应当free、delete删掉,程序设计错误没有释放就会泄露)。系统资源泄露(Resource leak),soket等申请的资源没有使用相应的函数释放掉,导致性能下降。没有将基类的析构函数定义为虚函数,当基类指针指向子类对象时,如果基类的析构函数不是虚函数,那么子类的析构函数就不会被调用,那么就不会释放相关内存。

12:硬链接和软链接的区别:(都是为了解决文件共享的问题)

  • 硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块。相当于同一个文件的别名, ln创建。
  • 软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。ln -s  A  file

13: 内核态和用户态的区别:是操作系统的两种运行级别,最大区别就是运行级别、特权不同。用户态的程序不能直接访问操作系统内核态数据结构和程序,他们之间状态的转换方式主要包括,系统调用、异常和中断。

14: 如何设计server,使得服务端能够接受多个客户端的请求:线程池、多线程、I/O复用

15: 通过ps ux的命令来判断当前机器处于什么状态

(1)运行(正在运行或在运行队列中等待) R
(2)中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) S
(3)不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)  D
(4)僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)  Z 
(5)停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)  T

16:常用的线程模型:生产者消费者模型(线程池)、master-worker模型(就是main--pthread_create)、fork/join模型。

17: 从源码到可执行文件的过程

(1) 预编译:删除#deine 宏 , 处理所有条件#id #endif, 处理#include指令,#删除所有的注释"//"。预编译生成xxx.ii文件

(2)编译:进行语义,语法,词法分析,并进行源码优化, 将.i文件生成汇编语言

(3)汇编: 将汇编代码转化成机器指令,产生目标文件xxx.obj

(4)链接: 将目标文件进行链接。链接分为静态链接和动态链接

动态库(.so)和静态库(.a)。https://blog.csdn.net/jnu_simba/article/details/9569107

操作系统相关基础知识相关推荐

  1. 【RAC】RAC相关基础知识

    [RAC]RAC相关基础知识 1.CRS简介    从Oracle 10G开始,oracle引进一套完整的集群管理解决方案--Cluster-Ready Services,它包括集群连通性.消息和锁. ...

  2. 黑马程序员_JAVA相关基础知识

    ------- android培训.java培训.期待与您交流! -------- JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便 ...

  3. Linux 操作系统编程基础知识

    Linux操作系统 1.Linux 操作系统编程基础知识 1.3 系统调用和库函数 1.3.1 接口 命令接口:以命令形式呈现在用户面前,方便用户直接或间接控制自己的作业. 程序接口:为应用程序使用系 ...

  4. 【C++后台开发面经】面试总结第三波:针对后台开发相关基础知识分类总结

    前言 面试总结第三波,关于后台开发面试相关基础知识,数据结构.算法.linux操作系统.计算机网络.C++.数据库进行分类总结. 后端面试总结 目录 后端面试总结 1.数据结构 链表和数组的区别 树的 ...

  5. mysql bdb版本_深入理解mysql之BDB系列(1)---BDB相关基础知识

    深入理解mysql之BDB系列(1) ---BDB相关基础知识 作者:杨万富 一:BDB体系结构 1.1.BDB体系结构 BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1中相关数). ...

  6. 深入理解mysql之BDB系列(1)---BDB相关基础知识

        深入理解mysql之BDB系列(1) ---BDB相关基础知识 作者:杨万富 一:BDB体系结构 1.1.BDB体系结构 BDB整体的体系结构如图1.1所示,包含五个子系统(见图1.1中相关数 ...

  7. 操作系统2021基础知识

    操作系统2021基础知识 一.操作系统引论 1 什么是操作系统? 2 什么系统调用? 用户态和系统态. 3 操作系统的特性(并共虚异) 4 并发,并行,同步,异步的区别? 5 中断的分类 6 操作系统 ...

  8. 【生信】基因组学相关基础知识2

    [生信]基因组学相关基础知识2 本文图片来源网络或学术论文,文字部分来源网络与学术论文,仅供学习使用. 目录 [生信]基因组学相关基础知识2 9.细胞增殖与分化的定义和区别 10.有丝分裂与减数分裂 ...

  9. 零件三维缺陷检测相关基础知识

    零件三维缺陷检测相关基础知识 看了几篇文献,总结下来三维缺陷检测的过程,总的来说分为: 零件表面的三维数据获取 根据零件的三维数据信息进行三维重建 目标点云与标准点云的配准 配准后的点云做差得到缺陷信 ...

最新文章

  1. linux centos7挂载/dev/sdb硬盘到根目录(根目录扩容新磁盘)
  2. 对联系人进行增删改查
  3. IOS UIPageControl的设置点为一张图片
  4. 哈夫曼编码c语言论文,哈夫曼编码的实现及应用论文.doc
  5. 没想到我的粉丝里还有这么多C++er,瑞思拜!
  6. putty远程linux系统时间修改,用putty怎么修改监控服务器时间?
  7. zabbix之解决中文乱码
  8. 大数据之-Hadoop3.x_MapReduce_WordCount编写_Mapper---大数据之hadoop3.x工作笔记0089
  9. Linux iptables 防火墙常用规则
  10. Flutter布局锦囊---简单的应用栏
  11. MySQL MVCC原理
  12. python 清屏_见识Python百宝箱,十行代码制作动态广告牌
  13. 地图学相关知识(四)
  14. 冰刃 IceSword1.22 中文版
  15. RFC1867协议介绍
  16. Eclipse开发工具--使用JDT开发java程序
  17. 为什么有些人拼了命也要考上985?
  18. 五子棋游戏AI智能算法设计
  19. 神经网络算法的关键参数,神经网络预测时间序列
  20. python免费IP代理,简单采集一下康康能不能用~

热门文章

  1. 复旦大学教授肖仰华:ChatGPT 浪潮下,面向大模型如何做数据治理?
  2. 《国际经济学(商学院)》
  3. Conlletion集合框架总结大全
  4. 4-ipv6基础知识之-邻居发现协议NDP
  5. 元宇宙的未来:以上帝视角掌控一切,你准备好了吗?
  6. フローのパラメータについて
  7. vmware挂载磁盘脱机解决方案
  8. 高新技术企业申报流程!
  9. Xposed 插件开发之二: Xposed的一些知识
  10. M域、B域、O域分别指什么?