Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions W13D1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
自旋锁 Spin Lock 是一种线程同步机制,与其他 lock 不同,自旋锁采用了忙等待的方式,而不是将线程 sleep。

自旋锁通常使用一个标志变量表示锁的状态。常见的标志变量类型是原子变量,可以在多线程环境下进行原子操作。当一个线程希望获取自旋锁时,它会检查标志变量的状态。如果标志变量为空闲状态,表示锁可用,线程将将标志变量设置为占用状态,并继续执行。如果标志变量已被其他线程占用,则当前线程会继续忙等待(自旋),直到锁的状态变为空闲。当一个线程完成对共享资源的访问后,它会将标志变量设置为空闲状态,以释放锁,使其他线程能够获取它。

自旋锁的实现可以基于底层硬件提供的原子操作,如比较交换(compare-and-swap)指令。在这种情况下,获取锁的操作可以使用原子比较交换指令来检查和设置标志变量的状态,从而确保原子性。
22 changes: 22 additions & 0 deletions W3D2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
计算机的性能由其响应时间来决定,一个程序的CPU花费的时间主要由指令数、每条指令的周期数(CPI)、时钟频率决定,其中时钟频率表示每秒钟发生的时钟周期数。

平均CPI等于每条指令的周期数乘以其频率的总和再除以总指令数。

对于两种不同的指令集架构,SISC具有比RISC更小的指令数,但其CPI更大。

哈佛架构与冯诺依曼架构:

1. 存储器结构:
- 哈佛架构使用两个独立的存储器来存储指令和数据,指令和数据具有不同的物理存储器,并且可以同时访问指令和数据。哈佛架构在并行处理和高效访问方面具有优势。
- 冯诺依曼架构使用单个存储器来存储指令和数据。指令和数据存储在同一块存储器中。冯诺依曼架构在存储器成本和复杂性方面更加简单,但可能会限制并行处理能力。
2. 指令处理方式:
- 哈佛架构中的指令和数据被分别存储,因此处理器可以同时从指令存储器和数据存储器中读取信息,使得指令和数据的访问可以并行进行,提高了执行效率。
- 冯诺依曼架构中的指令和数据存储在同一存储器中,处理器需要按照指令流水线的方式依次读取和执行指令。这种方式可能会导致指令和数据的访问产生冲突,影响执行效率。

内存层次结构依次为:寄存器、缓存、内存、磁盘、磁带

缓存:

直接映射缓存将主存地址直接映射到缓存中的一个固定位置

两路组相连缓存将主存地址映射到缓存的两个组中的一个
17 changes: 17 additions & 0 deletions W8D2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Memory Bank(内存块)是指内存系统中的一个逻辑单元,用于存储和检索数据。内存通常被划分为多个内存块,每个内存块都有一个唯一的地址范围。

多个内存访问操作(例如读取或写入)试图同时访问同一个内存块时会发生冲突,冲突可能导致性能下降,因为需要进行调度和处理。

有如下几种优化措施:

1. 内存布局:合理的内存布局可以减少冲突。例如,在二维数组访问中,可以将数组元素按行或按列排列,以减少跨越多个内存块的访问。
2. 内存对齐:内存对齐是指将数据存储在内存中的地址上以最大程度利用内存块的方式。对齐数据可以提高内存访问的效率,并减少冲突。
3. 数据重排:重新组织数据存储布局,减少内存冲突。例如,使用阵列重排(Array Padding)技术,可以在数据元素之间插入填充数据,以增加数据之间的间隔,从而减少冲突。



关于数据纠错有多种方法。其中,Hamming 码是一种纠错码,基本原理是在发送数据时添加冗余位(校验位)来检测和纠正错误。具体来说,对于一个数据块,冗余位的数量和位置是根据码字的大小和位置进行计算的。

通过添加冗余位,Hamming 码可以检测单比特错误(单个位的错误)和部分双比特错误(两个位中的一个位错误)。同时,它可以纠正单比特错误,并在某些情况下纠正双比特错误。

Hamming 码有一些限制。它只能纠正有限数量的错误,并且随着数据块大小的增加,所需的冗余位数量也会增加,从而导致较大的开销。