首页 > 编程语言 >1.程序员自我修养 - 绪论1

1.程序员自我修养 - 绪论1

时间:2023-04-10 16:04:14浏览次数:38  
标签:绪论 用户 信号量 程序员 修养 线程 内核 执行 内存


1.1南北桥

       为了协调CPU、内存和高速的图形设备,设计了高速北桥芯片;同时为了协调磁盘、USB、键盘等低速设备,设计了南桥低速芯片。现代计算机北桥已集成到CPU内部,南桥一般指现在的芯片组,新名称为PCH(Platform Controller Hub)。

北桥:适配高速设备。北桥芯片则主要是集成了内存控制器、PCI-E控制器,显卡。

南桥:适配低速设备,并汇聚数据接入北桥。南桥芯片主要集成了USB控制器,磁盘控制器这类与输入、输出相关的控制器,统称为I/O控制器。

1.2SMP与多核

SMP对称多处理器,每个CPU在系统中所处的地位和发挥的功能都一样。

多核处理器:将多个处理器合并在一起打包,这些处理器间共享缓存部件,只保留多个核心。

1.3计算机软件体系结构

1.程序员自我修养 - 绪论1_内核线程

中间层:除了硬件和应用程序,其它都是中间层,每个中间层都是对它下面那层的包装和扩展。

接口关系:应用程序接口的提供者是运行库,什么样的运行库提供什么样的API;运行库使用操作系统提供的系统调用接口,系统调用接口在实现中往往以软件中断的方式提供,如Linux中用0x80号中断作为系统调用接口;操作系统内核是硬件接口的使用者,驱动程序决定如何操作硬件。

1.4操作系统

操作系统功能:提供抽象的接口、管理硬件资源。

分段:解决了地址隔离(判断非法访问则拒绝地址请求,并报告给操作系统或监控程序进行处理)和程序运行的地址不确定问题(无论分配到物理地址的那个区域,均不需关心物理地址的变化)。

分页:粒度更小的内存分割和映射方法,是的程序局部性原理充分利用,解决了内存不足时大量数据换入换出内存导致效率低问题。

1.5线程

线程组成:线程ID、当前指令指针(PC)、寄存器集合和堆栈,多线程可互不干扰的并发执行并共享进程的全局变量和堆数据。

线程访问权限:私有地址空间包括栈、线程局部存储、寄存器,线程共享全局变量、堆、静态变量、程序代码、打开的文件。

线程状态切换:

1.程序员自我修养 - 绪论1_内核线程_02

线程优先级改变的三种方式:用户指定优先级、根据进入等待状态的频繁程度提升或降低优先级、长时间得不到执行而被提升优先级。

Windows Linux 线程和进程:Windows 使用CreateProcess 和 CreateThread 来创建进程和线程;Linux并不存在真正意义上的线程,Linux 下不同任务通过选择共享内存空间的方式成为线程。fork并不复制原任务的内存空间,而是和原任务一起共享写时复制(两个任务可以同时自由地读取内存,任意任务试图对内存修改时,内存复制一份提供给修改方单独使用,以免影响其它任务使用)的内存空间。 

1.程序员自我修养 - 绪论1_内核线程_03

同步与锁:将各线程对同一个数据的访问同步,即一个线程访问数据未结束时,其它线程不得对同一个数据进行访问。同步的方法包括锁(二元信号量、信号量等)、互斥量、临界区、读写锁和条件变量等,二元信号量适合于只能被唯一一个线程独占访问的资源;信号量允许多个线程并发的访问资源。互斥量与二元信号类似,但信号量在整个系统可被任意线程获取并释放,而互斥量则要求那个线程获取则那个线程负责释放。临界区作用范围仅限于本进程,其它进程无法获取该锁,而互斥量和信号量在系统任何进程都可见。读写锁解决了上述同步方式对于读取频繁而偶尔写入带来的低效问题,它有共享和独占两种获取方式,锁处于自由状态时可以任一种方式获取锁,共享时其它线程以共享方式获取锁仍会成功,独占时将组织任何其它线程获取该锁。条件变量类似于栅栏,支持等待和唤醒操作,它可以让许多线程一起等待某个事件的发生,当事件发生(唤醒)时,所有线程可以一起恢复执行。

可重入与线程安全:重入表示一个函数没执行完由于外部因素或内部调用又一次进入该函数执行,包括多线程同时执行这个函数、函数递归调用自生两种情况。可重入表示该函数被重入之后不会产生任何不良后果,因此其具备以下特点:

 

1.程序员自我修养 - 绪论1_数据_04

防止过渡优化:编译器优化的时候可能为了效率而将寄存器的值过段事件写回或交换毫不相干的两条相邻指令的执行顺序,进而引发线程安全问题,通常采用volatile关键字阻止过渡优化,volatile基本可以做到两件事:

 

1.程序员自我修养 - 绪论1_信号量_05

volatile无法做到避免交换两条相邻指令的执行,因CPU存在动态调度,可能交换相邻指令的执行顺序,可采用barrier指令组织CPU将该指令之前(后)的指令换到barrier 之后(前),如下保证对象构造在barrier执行之前完成:

1.程序员自我修养 - 绪论1_数据_06

三种线程模型:用户实际使用的线程并不是内核线程,而是存在于用户态的用户线程,用户态线程并不一定在操作系统内核里对应同等数量的内核线程。一对一模型,一个用户使用的线程唯一对应一个内核使用的线程(反过来不一定,因内核线程可能部分空闲),该模型缺点是系统内核线程数量有限,因此用户线程数量会受到限制,此外上下文切换开销大;多对一模型,多个用户线程映射到一个内核线程,线程间切换由用户态代码进行,切换速度快,但若一个用户线程阻塞,所有线程都将无法执行,且处理器数量的增多对一对一模型的线程性能无明显帮助;多对多模型,将多个用户线程映射到少数但不止一个内核线程上,结合了其它两种模型的优点。

 

 

标签:绪论,用户,信号量,程序员,修养,线程,内核,执行,内存
From: https://blog.51cto.com/u_16063698/6181053

相关文章

  • 程序员面试金典---2
    回文排列思路:回文排列的特征之一就是如果字符串中每个字符的个数都是两个,或者只有只有一个字符个数为奇数个。只有上述两种结果。classSolution:defcanPermutePalindrome(self,s:str)->bool://将字符串转成个数字典s_dic=Counter(s)/......
  • 不要做一个傲慢的程序员
    万事通不会在这个职业中走得太远。昨天,另一位开发人员向我描述了一个问题。看起来应该很简单。所以,我这样告诉他。那是个大错误。问题,而不是陈述我以为我知道答案。但这个问题一直困扰着一位非常聪明的工程师。我应该更明智地考虑我的话。当您遇到新问题时,请在开始陈述之前......
  • 程序员的数学1-1 进制转换
    进制转换人们正常接触的数字为十进制格式,但是电脑读取的格式为0或1即二进制表示。  引用程序员的数学1-p3   引用程序员的数学1-p6 反之,求余求几进制的转换就取几进制的余数  引用程序员的数学1-p7C语言的实现  C语言进制转换代码二进制转换为十......
  • 程序员如何与ChatGPT携手作战
    黄昏将至,还是黎明到来?ChatGPT大火,使得程序员对于”35岁危机“的担忧又加一层:如何在35岁之前避免被AI淘汰?因为ChatGPT擅长语言逻辑类的工作,这不正是程序员擅长的事情么?这不是要先革了程序员的命么?哎,人生真难。实际上,ChatGPT并无意于淘汰任何人,它只是一种更为先进的工具。这......
  • #yyds干货盘点# LeetCode程序员面试金典:四数之和
    题目:给你一个由n个整数组成的数组 nums,和一个目标值target。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a],nums[b],nums[c],nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0<=a,b,c,d <na、b、c和d互不相同nums[a]+nums[b]+nums[c]......
  • 做个清醒的程序员之努力工作为哪般
    阅读时长约10分钟,共计2268个字如果要问自己这样一个问题:“我们工作的意义到底是什么?”会得到怎样的答案?是为了安身立命?是为了满足别人的期待?是为了得到社会的认同?抑或是索性认为工作是无意义的?如果我说:工作的意义在于自我实现,你会同意吗?你会觉得这样的观点很片面吗?你会觉得这很......
  • 28 岁字节程序员退休,财务自由
    阅读本文大概需要2.9分钟。今天互联网热议最大的一个话题,莫过于字节跳动一28岁程序员大佬,实现财务自由退休了,准备旅居日本经营温泉酒店,让无数人羡慕嫉妒恨啊。这个程序员大佬的名字就不说了,给大家简单说下他的经历吧。1、深圳中学(05-08),高考之后,开始学习写代码;2、暨南大学(08-......
  • 程序员漫漫回乡路--我以前的一些想法
    职业/事业/理想去北京混5到10年,攒50万++,回璩湾,自由职业。电脑培训-软件咨询,网上找点活,开个店。去北京-武汉等城市混,做到技术总监这个级别,然后IT创业。去做零售,副食店-超市-衣服然后在璩湾或襄阳或武汉开店。架构师,技术顾问。IT培训,教学视频,技术写作。保研,混个专硕研究生......
  • 黑马程序员前端-CSS:溢出的文字省略号显示
    按照HTML+CSS的学习顺序笔记已经更新了28篇内容了,因为篇幅问题,请看文末。目录一、单行文本溢出显示省略号二、多行文本溢出显示省略号(了解即可)三、往期合集今天来学溢出文字省略号显示。一、单行文本溢出显示省略号单行文本溢出显示省略号必须满足三个条件:/*1.先强制一行内显示文......
  • 黑马程序员前端-CSS盒子模型以及PS基础
    前端学习笔记教程不定期更新中,传送门:前端HTML第一天:什么是网页?什么是HTML?网页怎么形成?黑马程序员前端-CSS入门总结黑马程序员前端-CSS之emmet语法黑马程序员前端-CSS的复合选择器黑马程序员前端-CSS的显示模式黑马程序员前端-CSS背景黑马程序员前端-CSS三大特性:叠层性、继承性、优......