Giter Club home page Giter Club logo

computer-basics's People

Contributors

ab503044120 avatar andyaplah avatar austenyad avatar bloodbamboo avatar cjlsuper avatar conanholmes avatar crashtestgithub avatar cwxvashon avatar empty56631 avatar feature211 avatar foryoung2018 avatar geesonlin888 avatar genglei avatar ghryujin avatar guangzq avatar haowangcold avatar jessonyue avatar jouerranger avatar lanfairy avatar luckygemer avatar nipengfei avatar qianchunzheng avatar singlerzhou avatar sinlazhan avatar slowhandwc avatar whoislxy avatar world4ugit avatar xiaoxixigh avatar xt4665699 avatar zpjsmalltime avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

computer-basics's Issues

关于针对Computer-basics项目的Issues的相关说明

Computer-basics目前已经发布了,我们主要是利用这个项目来帮助我们掌握基础的计算机学科知识,建议大家在提交Issues时注明详细信息,方便确认和后期的整理:

issue提交例子:

  • 学科:《深入理解计算机系统》
  • 类型:知识理解/代码问题
  • 内容:自己对问题的描述,有相关的贴图更好,如果是后期代码的一些问题,可以粘贴相关的版本、log、已经处理的步骤等等,方便问题的定位。

第六章书430页,高速缓存命中这块看不明白

430页这里写的1读地址0的字,还勉强理解,到了下面的读取地址1,13,8,0这里说的缓存命中看不明白。
我的疑问,
1缓存是否有效和是否命中有关系吗?无效就一定不命中吗?
2这里的有效位标记位分别啥意思?命中是简单的是否存在的意思吗?
3书上的这个事例是否需要参考上面的表6-30?

静态库链接的问题

FE94A486-0731-41dd-95DF-E4D398BE061C

例子中的 AB链接之后变量var 地址确定下来未0x1000 这个地址是怎么得到的,这个地址和程序运行时的虚拟地址和内存地址有啥联系?

大端法和小端法

这里说最高有效位排到前面是大端法,最低有效位排到前面是小端法,
这个图,01应该是最低有效位吧..怎么是大端法呀?应该是小端法呀
有点小疑惑...
image

3.7.3 数据传递(栈帧相关问题)

在x86-64上,当函数传递整型参数大于6个,多出的部分会存放在函数在栈帧分配的空间上,通过栈传递的参数,所有数据大小都向8的倍数对齐。
问题1:这6个整型的6是固定的吗,还是不同的处理器上是不同的?
问题2:数据的大小向8的倍数对齐,如果参数里最大的数据占用8个字节,那么其他也是占用8个字节吗?如果最大的数据占用16字节,是否其他也需要统一的保持一致16字节,又或者说只是8的倍数即可,无需所有参数都是统一大小?

深入理解计算机系统第八章8.2.4关于用户模式和内核模式的问题(p510)

在书的8.2.4 用户模式和内核模式中提到当设置模式位的时候,进程享有内核模式,如果没有设置,则为用户模式。那么这两个模式在Linux下会共存吗?
在 Android 系统中存在 gid(group id) 和 uid(user id)用来管理权限,感觉这两个和书中提到的内核模式和用户模式有相通的地方,但好像就有不太一样,那这两对概念有什么相同点和不同点,可以混为一谈吗?

第二章 2.3.6-2.3.7 整数乘法及除法

时间周期概念

文中提出乘法需要大于等于10个时间周期,那么这里面的时间周期是什么?网上查的话是cpu频率的倒数、单片机的最小时间单位是这个么?为什么说乘法要10个以上除法要30个不太明白怎么来的。。。

乘法优化

文中举例 x*14 编译器重写成(x <<3)+(x<<2)+(x<<1),那么是不是编译器就没有乘法或除法就都是变换成位移和加减法?

关联问题

WX20200612-001144@2x

是否java中的变量是否与符号解析有关联呢,是否通过C语言进行关联的呢?

牺牲页的问题

缺页异常处理器会选择一个牺牲页,这个牺牲页的作用不是太明白。我的理解是缺页时从磁盘拷贝到内存时发现没有空余的页了,然后覆盖一个页数据。这个页就是牺牲页?

引用变量存储问题

java编程**中,"倘若“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方复制到另一个地方"
我的问题是:
引用变量是栈内存开辟空间,创建对象是在堆内存开辟空间,那么对象中的属性,是引用变量,那么创建对象的时候,对象中的属性(引用变量)是怎么存储的,它会存储在哪里?

动态链接的问题

学科:《深入理解计算机系统》
类型:知识理解
内容:

  1. 第七章 477页 gcc -static 为什么要static 书上解释 -static 参数告诉编译器驱动程序,链接器应该构建一个完全链接的可执行目标文件,它可以加载到内存并运行,在加载时无须更进一步的链.
    个人理解: 假如我调用了printf, printf这个函数也会打入可执行文件中.

  2. 静态链接时把整个可重定位文件打到可执行文件中,还是只打调用了的
    3.第七章,7.12 489页 位置无关代码
    书上写: 现代系统以这样一种方式编译共享模块的代码段,使得可以把它们
    加载到内存的任何位置而无需链接器修改。使用这种方法,无限多个进程可以共享一个共
    享模块的代码段的单一副本。(当然,每个进程仍然会有它自己的读/写数据块。)
    个人理解: 那意思是这个进程加载了so库在其他进程也能用吗,如果是这样 我这个进程修改了so的里面的全局变量 其他进程中的也会被修改呢

  3. 个人对静态库和动态库的理解:
    静态库链接可以按需加载打入可执行文件中,
    动态库在运行时必须得完全加载进内存
    这么看来静态库更省内存

《深入理解计算机系统》第二章2.1.9——算术右移和逻辑右移,向左却没有这两种

学科:《深入理解计算机系统》
类型:知识理解
内容:该书中第二章2.1. 9 中提到C语言中的移位运算中左移的就是丢弃左边最高位,右端补零。右移运算中分为逻辑右移和算术右移,逻辑右左端补零,算术右移左端补最高位有效值。
1、目前不知道为是左移位什么没有这两种区别)。
2、有点不清楚逻辑右移和算术右移的区别。
image

第12章,12.1.2,进程疑问

对于在父、子进程间共享状态信息,进程有一个非常清晰的模型:共享文件表,但是不共
享用户地址空间。
对这几句话有点疑问:
1、父、子进程怎么产生的?产生的场景是什么?
2.、父、子进程间共享状态信息是相互绑定的么,父进程销毁会对子进程有有影响么?
3、共享文件表是什么?包含什么信息?

第八章 异常控制流 8.5小节的程序问题

学科:《深入理解计算机系统》
类型:代码问题
内容:8.5小节 532页

void sigint_handler(int sig) /* SIGINT handler */   //line:ecf:sigint:beginhandler
{
    printf("Caught SIGINT!%d\n", getpid());    //line:ecf:sigint:printhandler
    exit(0);                      //line:ecf:sigint:exithandler
}                                              //line:ecf:sigint:endhandler

int main() {
    /* Install the SIGINT handler */
    if (signal(SIGINT, sigint_handler) == SIG_ERR)  //line:ecf:sigint:begininstall
        unix_error("signal error");                 //line:ecf:sigint:endinstall
    printf("呵呵呵%d",getpid());
    pause(); /* Wait for the receipt of a signal */  //line:ecf:sigint:pause

    return 0;
}

为什么 呵呵呵 在ctrl c之后才会显示出来
image

第七章 链接问题

C、C++在链接时,链接器是按需复制被程序引用的目标模块,而不是复制整个静态库。哪 在Java和 Android 是怎么操作的?Android 中的 Dalvik 和 ART 虚拟机起到了什么作用?
Android程序是即可以在加载时链接又可以在运行时链接吗?
.a文件是 C,C++,Objective-c的静态库
那 jar 包(一组 class 文件的压缩包)是 Java的 静态库?

在linux进程中的fd

学科:《深入理解计算机系统》
类型:知识理解
内容:第十二章 12.2小节 684页
image
如上图select 方法第一个参数需要传最大的fd ,由此有几个疑问

  1. 每个进程的fd是不是有限制呢,最大是多少呢
  2. 每个进程fd为什么都是独立计算的呢( 从3开始,012是标准准io)
  3. 关闭进程后fd会自动回收吗(包括子进程和父进程)

问题:难道IO设备直接通过IO总线和CPU中寄存器打交道,不需要经过主内存?

学科:《深入理解计算机系统》
类型:知识理解
内容:该书中1.4. 2 运行 hello 程序有两段描述
1、“'初始时,shell 程序执行它的指令,等待我们输人一个命令。当我们在键盘上输人字符串
./hello后,shell 程序将字符逐一读人寄存器,再把它存放到内存中,”

2、“一旦目标文件 hello 中的代码和数据被加载到主存,处理器就开始执行 hello 程序
的 main 程序中的机器语言指令。这些指令将hello,world/n字符串中的字节从主存
复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示在屏幕上。”

问题:难道IO设备直接通过IO总线和CPU中寄存器打交道,不需要经过主内存?

关联问题

WX20200612-001144@2x

是否java中的变量是否与符号解析有关联呢,是否通过C语言惊醒关联的呢?

第九章mmap,文件映射,匿名映射的区别,及Android共享内存相关的问题

文件映射,匿名映射的区别:----------------------------------

image

从文章看,我个人认为两者场景的区别:
1、匿名文件会清零所有数据,由内核创建,在子进程和父进程间通信,不知道理解对不?

2、匿名文件没有文件打开关闭,所以更高效?

Android共享内存相关的问题:----------------------------------
1、Android binder驱动使用的内存映射函数 binder_mmap 最终调用的是linux的mmap。
从根本上来说binder通信,使用binder驱动作为共享文件的mmap,这种深层次的理解有问题吗?

2、在学习surfacelinger的时候,经常看到Ashmem匿名共享内存进程间传递数据的使用分析(应该是比较老的资料)。
其实现原理看起来也是调用mmap,只是没有对传递数据的大小像binder使用的限制。
是否可以认为这两种进程间通信的方式殊途同归,其根本实现都是mmap?

关于进程回收的问题

学科:《深入理解计算机系统》
类型:知识理解
内容:第八章 8.4.3 回收子进程

当一个子进程终止时,需要等待被父进程回收:
1、为什么是由父进程来管理子进程的回收?这样设计的好处是什么?
2、为什么不像jvm中的gc一样,设计一个专门用于回收进程的进程?
3、线程在运行结束后,又是怎样被回收资源的呢?

《深入理解计算机系统》第二章2.2.1——负数取值范围

学科:《深入理解计算机系统》
类型:知识理解
内容:第二章2.2.1 中32位和64位程序上C语言整型数据的取值范围不对称,负数的范围比正数的范围大1,这是规定吗,不清楚为什么这样规定,是不是有什么原因啊。
image

节头表与段头表映射字段.shstrtab

节头表中的字段都能在段头表中找到对应的映射关系,我知道,shstrtab这个很特殊, 包含了所有节的名称,我的问题是为什么,shstrtab在段头中没有对应的映射关系?

小端法的意义

既然大端法更符合人类阅读的习惯,那为什么还会有小端法?是为了效率麽?

6.5章节中提及的概念:局部变量存储在寄存器中

  • 《深入理解计算机系统》第6.5章节:

路哥,早上好,问一个问题,文中说“对局部变量的反复引用是友好的,因为编译器可将局部变量存储在寄存器中”,这句话该怎么去理解?在JVM中,函数在运行阶段会有一个栈帧的概念,栈帧中会有局部变量表,局部变量是保存在局部变量表里面的,然而它是怎么又保存到寄存器中去了,是因为层级不一样吗,反复用到的局部变量就会升级保存到CPU级别的Reg里面去?

《深入理解计算机系统》第一章 1.7.1 进程——进程上下文切换概念问题

学科:《深入理解计算机系统》
类型:知识理解
内容:该书中1.7. 1 进程中对上文切换的定义。我以前在听一些工开课的时候,在讲多线程的时候,说是线程之间的切换叫做上下文切换,但是书中说是进程之间的切换是上下文切换,这两个上下文切换是一个概念吗。在就是线程不是运行在进程当中吗,如果同一个进程中的线程切换难道没有上下文切换的概念吗,虽然是同一进程的线程互相切换也得有消耗吧。

image

第三章146页,条件预测惩罚浪费的时间在哪?

条件数据传送和条件控制转移的对比,条件数据传送会计算一个条件操作的两种结果。而条件控制转移会通过条件预测来执行一个分支,预测错误则会从正确的地方开始执行。预测错误会产生条件预测惩罚,这会导致条件控制转移耗费的时间大于条件数据传送。既然在这种情况下两种方式都执行了两个分支,那么为什么条件控制转移耗费的时间要多?条件预测惩罚是否意味着,需要将寄存器和内存的值回滚为之前的值所以耗费了更多的时间?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.