所在小组:第五组 (所有成员回帖)
组内昵称: 李锦锐、张学广、陈松彬、王传义、肖思成、郑伟钊、孙恒
By: 张学广
深入理解计算机第一章
这一章整体介绍了下计算机操作系统的概念,结构,并从hello程序串通了程序执行的流程。
首先,理解操作系统是作为硬件与应用程序之间的媒介,通过对底层硬件的封装和抽象,提供简单的接口给上层应用程序使用,包括文件是对io设备的抽象、虚拟内存是对内存的抽象,进程是对一个运行中程序的抽象(包括了它占用的资源)
之后是对程序是如何编译执行的介绍,简单来说就是将我们能理解的高级语言编译链接得到计算机能理解的二进制文件,这个文件也被称为可执行文件。这个文件首先被加载到内存,cpu经历取指、译码、执指的过程完成对程序的运算执行,其中pc寄存器是用来告诉我们下一条执行的指令地址的,通过这样的流程执行完整个程序。
最后是对并发的介绍,我们计算机上的程序并不是一个个执行的,而是在我们看来多个一起执行的,cpu只有一个(暂不说多核),同时只能有一个程序在运行,所以并发可以理解为cpu在多个程序切换,因为切换太快,所以在我们看来是同时执行的,这个是由时钟中断实现的
Chapter1
Author: @陈松彬
Date: 2020-9-20
第一章作者从一个很高的视角,为我们剖析了操作系统的构成(冯诺伊曼体系)与运行机制(cpu取指令,执行指令),每一个点细挖下去都会是一个大章节。我想先把一些疑问抛出来,读完之后的章节之后再重新回来回顾第一章。
思考
-
用分层和抽象的视角去思考问题
分层:对于计算机系统这么复杂的东西,可以将其分为三大层,层与层之间规定了交互的接口:
- 硬件层
- 内核层
- 应用层
抽象:对于不同的IO设备,在内核看来,都是一个文件,内核读写的时候都是用的同一个接口write/read,具体的读写实现由各个硬件厂商的驱动完成
这让我联想到了我们做微服务设计的时候,要进行模块的拆分,模块与模块之间需要约定好交互的接口,每个模块各司其职其职
- 对于系统设计的时候,如果比较复杂,不如先对系统进行模块划分,之后再考虑具体实现
- 设计模块对外的接口时候,一定要尽量保证接口定义,不要轻易改变,因此设计接口的时候,不妨多些考虑
-
分层的存储
在操作系统中,充分利用了时间局部性和空间局部性的原理,使用分层的存储结构,在保证了成本的同时,大大提高了CPU执行效率。
(1)在应用设计的时候,考虑存储,也可以借鉴这种存储设计,比如设计一个TSDB(Time Series Database):
假设:对于t-1 day的相关查询占据了总查询90%,而对于更早之前的查询只占据了10%
反过来,t-1day的所有数据只占了总存储的1%,其他时间的数据占总存储的99%
我们可以利用这个原理:
- t-1 day的数据存储在内存
- 其他数据存储在SSD、或者更廉价的机械硬盘
这样在能保证大部分查询的速度的同时,而且大大节约了存储成本
(2)在编写代码的时候,我们也可以利用这个分层的存储,比如同一个功能可以用数组和链表实现,并且需要遍历其中的元素,那么使用数组实现这个功能的性能是不是就会更好?
sum := 0 for element := range array or linklist sum += element
疑问
- 操作系统与内核的关系?
- 系统调用的具体流程?
- 怎么理解系统调用中”陷入内核“这个概念?
- CPU中,多级缓存L1、L2、L3与内存的一致性如何保证?
By: 王传义
第一周打卡:
关于 一个程序是如何执行的,具体来说在单核下 执行2个字如何 理解的。
(1) shell 执行fork +exec命令运行一个程序。因此可见程序运行需要一个地址空间,包括只读段,堆栈这些虚拟空间. 这个时候经常进程创建成功。这只是静态部分,如果单任务情况下已经满足了。
(2) 进程执行具体是通过线程调用(默认一个线程)完成的。
场景:在执行过程需要IO操作 鼠标键盘,,网络 信号等任务时候。需要操作系统中断机制 完成协同工作。
例如。通过信号让一个阻塞在慢系统调用的线程从睡眠状态到运行状态。
(3)即使在单核情况下,除去中断外,系统调用也会引起cpu上下文切换。
vmstat 查看 in数量小于cs的印证了,上下文切换触发原因多种(进程,线程 切换 和中断切换)
(4) 有什么办法减少上下文切换?
a :无锁编程 ,一般锁会触发中断,内核用的说和普通高级说还不一样
b: 协程:上下文切换在内核完成,在用户态完成。
c:原子操作
d:减少线程数量。
因此可见,一个程序运行,这里抽象为进程这个概念。这个概念隐含很多东西,不仅是独占那么简单。需要更加复杂机制。
By: 肖思成
By: 李锦锐
Chapter 1 -Notes
Chapter 1 is the roadmap of this book started by a simple example that every programmer should have known - The “Hello world” program.
Unlike other book’s, The author break this program down into serval part and introduces the idea in computer systems by tracing the life cycle of the program, which give me a more clear picture of what this program doing in machine level.
There is a few key concepts I would like to bear in mind in the future .
Bits + Context = Information .
If you search wiki for the definition of information, there is a lots[bad expression] of sayings. But the author says, in the computer science context, information is equal to bits with context. information can be defined to bits with context.
-
All information in a system is represented as a bunch of bits . For example, the hello.c program is stored in a file as a sequence of bytes.
-
the same bits with different context , can be represent different things. it could be an integer, floating-point number, character strings, or machine instruction.
what is it context the above talking about ? I thought it mean the state of cpu register or the state of the process, for which it can take the same input bits, but interpret it into different objects.
A memory hierarchy
Why we need memory hierarch ?
Because, On top of the memory hierarchy memory has faster access time, less capacity and higher cost per bit stored. At the bottom there is larger storage capacity, slower access time and lower cost per bit stored.
As the book says
As we move from the top of hierarchy to the bottom, the devices become slower, larger, and less costly per byte.
More Detail:
Memory Hierarchy Introduction
Operating system manages the hardware
There two primary purposes of operating system:
- to protect the hardware from misuse by application
- to provide applications with simple and uniform mechanisms for manipulating low-level devices .
So it can be discussed into three parts: process、virtual memory、files.
Level of concurrency
- Concurrency, refer to the general concept of a system with multiple, simultaneous activities
- Parallelism, refer to the use of concurrency to make a system run faster.
There is a three ways of concurrency:
- The thread level
- Instruction level
- Single-Instruction, Multiple-Data (SIMD) Parallelism.
What is the different of these three levels ? how to distinguish them from each other ?
REFERENCE
Aside
-
You are 【poised 】for an exciting journey
-
You will learn the promises and 【pitfalls】 of concurrency
-
C also lacks 【explicit】 support for useful abstractions .
-
We do not know 【the inner workings】 of the compiler .
-
The 32-bit code that has become 【ubiquitous】 on machines running Linux, Windows.
-
The shell prints a prompt and waits for the next input command line.
-
The executable program 【resides】 on the disk.
-
A system can get the effect of both a very large memory and a very fast one by 【exploiting】 locality, 【the tendency for 】programs to access data and code in localized regions.
-
We can think of the operation system as a layer of software 【interposed 】between the application program and the hardware.
-
This concludes our initial 【whirlwind】 tour of systems.
这些有趣的表达,在中译本会被翻译成什么样呢?
By : 郑伟钊
By: 孙恒