1.28~2.01学习笔记

一. 

1. python中的异常
NameError: 尝试访问一个未申明的变量.表示我们访问了一个没有初始化的变量.在python解释器的符号表没有找到那个变量,就会生成.
ZeroDivisionError: 除数为零.任何数值被零除都会导致一个ZeroDivisionError异常.
SyntaxError: python解释器语法错误.它是唯一一个不是在运行时发生的异常.它代表python代码中有一个不正确的结构,在它改正前程序无法执行.
IndexError: 请求的索引超出序列范围.
KeyError: 请求一个不存在的字典关键字.
I/OError: 输入/输出错误.
AttributeError: 尝试访问未知的对象属性.

2. 检测和处理异常
try...except...finally
try语句块异常发生点后的剩余语句永远不会到达(所以也永远不会执行)

二. 操作系统
1. 一个基本思想: 系统中所有的信息,包括磁盘文件,内存中的程序,内存中存放的用户数据以及网络上传送的数据,都是由一串比特(由值0和1组成的位)表示的.
区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文.比如,在不同的上下文中,一个同样的字节序列可能表示一个整数,浮点数,字符串或者机器指令.

2. C编程语言的起源:
C语言是贝尔实验室的Dennis Ritchie于1969-1973年间创建的.美国国家标准学会在1989年颁布了ANSIC的标准,后来C语言的标准化成了国际标准化组织的责任.这些标准定义了C语言和一系列函数库,即所谓的C标准库.

3. 一个源程序hello.c文本到可执行目标文件的过程(GCC编译器驱动程序读取源程序文件hello.c,并把它翻译成一个可执行文件的目标文件hello的过程)
①预处理器(cpp)阶段:根据以字符#开头的命令,修改原始的C程序, 变为hello.i文本;
②编译阶段(cll): 将hello.i文本翻译成文本文件hello.s,它包含一个汇编语言程序;
③汇编阶段(as): 将hello.s翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序的格式.并将结果保存在目标文件hello.o中.hello.o文件是一个二进制文件;
④链接阶段(ld): 调用printf函数,链接器将这个文件以某种方式合并到hello.o程序中,得到hello文件,它是一个可执行目标文件,可以被加载到内存中,由系统执行.

4. 一个典型系统的硬件组织
总线, I/O设备, 主存, 处理器


5. 运行hello程序
在shell程序上输入执行的命令'./hello', shell程序将字符逐一读入寄存器,再把它放到内存;
我们在键盘上敲回车键时, shell程序知道我们已经结束命令的输入,然后shell执行一系列指令来加载可执行的hello文件,这些指令将hello目标文件中的代码和数据从磁盘复制到主存;
处理器就开始执行hello程序的main程序中的机器语言指令.这些指令将'hello, world\n'字符串中的字节从主存复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示在屏幕上.

6. 高速缓存存储器
运行一个程序, 需要把信息从一个地方挪到另一个地方,这样开销比较大,减慢了程序'真正'的工作,针对这种处理器与主存之间的差异,系统设计者采用了更小更快的存储设备,称为高速缓存存储器(cache),作为暂时的集结区域,存放处理器近期可能会需要的信息.

7. 操作系统 
操作系统可以看成是应用程序和硬件(处理器,主存, I/O设备)之间插入的一层软件.所有应用程序对硬件的操作尝试都必须通过操作系统.
操作系统有两个基本功能: 一防止硬件被失控的应用程序滥用;二向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备
操作系统通过几个基本的抽象概念(进程,虚拟内存,文件)来实现这两个功能.
文件是对I/O设备的抽象表示;虚拟内存是对主存和磁盘I/O设备的抽象表示;进程则是对处理器,主存和I/O设备的抽象表示.

8. 进程
进程是操作系统对一个正在运行的程序的一种抽象.在一个系统上可以同时运行多个进程,而每个进程都好像独占使用硬件.而并发运行,则是说一个进程的指令和另一个进程的指令是交错执行的,操作系统实现这种交错执行的机制称为上下文切换.
从一个进程到另一个进程的转换是由操作系统内核管理的.内核是操作系统代码常驻主存的部分.
例如: 当应用程序需要操作系统的某些操作时,比如读写文件,他就会执行一条特殊的系统调用指令,将控制权传递给内核,然后内核执行被请求的操作并返回应用程序.注意,内核不是一个独立的进程,相反,他是系统管理全部进程所用代码和数据结构的集合.

9. 线程
一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据.线程一般比进程更高效

10. 虚拟内存

11. 并发是指一次处理很多件事, 并行是指一次做多件事, 二者不同,但是有联系.一个关于结构,一个关于执行.并发用于制定方案,用来解决可能(但未必)并行的问题.并发不是并行,并发更好.
并发指一个同时具有多个活动的系统; 
并行指的是用并发来使一个系统运行得更快.并行可以在计算机系统的多个抽象层次上运用;

12. 超线程
超线程, 有时也称同时多线程,是一项允许一个CPU执行多个控制流的技术.它涉及CPU某些硬件有多个备份.

13. 信息存储
机器级程序将内存视为一个非常大的字节数组,称为虚拟内存.内存的每个字节都由一个唯一的数字来标识,称为它的地址.

14. C语言中指针的作用
在C语言中, 指针提供了引用数据结构的元素的机制,与变量类似,指针也有两个方面: 值和类型.它的值表示某个对象的位置,而它的类型表示那个位置上所存储对象的类型(比如整数或者浮点数)

15. 二进制, 十进制, 十六进制的转换: https://jingyan.baidu.com/article/495ba84109665338b30ede98.html

16. 字数据大小

17. 大多数64位机器也可以运行为32位机器编译的程序,这是一种向后兼容.我们将程序称为'32位程序'或'64位程序'时,区别在于该程序是如何编译的,而不是其运行的机器类型.

18. 某些机器选择在内存中按照从最低有效字节到最高有效字节的顺序存储对象,这种称为小端法;
      而另一些机器则按照从最高有效字节到最低有效字节的顺序存储, 这种称为大端法.

19. C和C++支持有符号, 无符号数, java只支持有符号数
     有符号数: 有正负之分
     无符号数: 无正负之分(只有正值)

20. 几个概念比喻一下

      cpu  =  脑袋: 每个人会做的事情都不一样,但主要都是通过脑袋来进行判断与控制身体各部分的活动
      内存  =  脑袋中放置正在被思考的数据的区块: 在实际活动过程中,我们的脑袋需要有外界刺激的数据(例如光线,环境,语言等)来分析,那这些互动数据暂时存放的地方就是内存,主要是用来提供给脑袋判断用的信息.
      硬盘  =  脑袋中放置回忆的记忆区块: 跟刚刚的内存不同,内存是提供脑袋目前要思考与处理的信息,但是有些生活琐事或其他没有要立刻处理的事情,就当成回忆先放置到脑袋的记忆深处,那就是硬盘,主要目的是将重要的数据记录起来,以便未来将这些重要的经验再次使用.
      主板  =  神经系统: 好像人类的神经一样,将所有重要的元件连接起来,包括手脚的活动都是脑袋发布命令后, 通过神经(主板)传导给手脚来进行活动.
      各项周边设备 = 人体与外界沟通的手,脚, 眼睛等:就好像手脚一般, 使人体与外界互动的重要关键
   显卡 = 脑袋中的影像: 将来自眼睛的刺激转成影像后在脑袋中呈现, 所以显卡所产生的数据来源也是cpu控制的
      电源供应器 = 心脏: 所有的元件要能运行地要有足够的电力供给才行,电力供给就好比心脏.


21. C语言版本提供了两种不同的浮点数据类型: float 和 double, 在支持IEEE浮点格式的机器上,这些数据类型就对应于单精度和双精度浮点.

22. elf文件

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值