Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix typos in ch1,ch3-9 #191

Merged
merged 10 commits into from
Jul 22, 2023
Merged

Fix typos in ch1,ch3-9 #191

merged 10 commits into from
Jul 22, 2023

Conversation

h888866j
Copy link
Contributor

@h888866j h888866j commented Jul 9, 2023

修复 描述错误,重复字词,缺字,错别字等。

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

调整了一下格式,进行了一些补充。

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个文件是咋回事?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个我们可以探讨一下怎样更方便理解,我感觉这个概念不是绝对的。之前从riscv calling convention来看,ra被分类成caller-saved,但是从编译出来的汇编代码来看,看起来更像是callee-saved,可以看这次commit。ra本身就是和调用行为密切相关的,所以这个caller/callee的边界其实很模糊。你可以讲一下你的理解。

@wyfcyx
Copy link
Collaborator

wyfcyx commented Jul 9, 2023

另外列出的几个问题请分别在这个repo里面提个issue,放到那个issue里面解决。

@h888866j
Copy link
Contributor Author

h888866j commented Jul 9, 2023

另外列出的几个问题请分别在这个repo里面提个issue,放到那个issue里面解决。

已为这几个问题提了 issue #194#193#192

@wyfcyx
Copy link
Collaborator

wyfcyx commented Jul 9, 2023

5-4和1-5有点问题,看一下review意见。

@h888866j
Copy link
Contributor Author

h888866j commented Jul 9, 2023

5-4和1-5有点问题,看一下review意见。

好的,已更新了comments, 加了自己的理解。

@wyfcyx
Copy link
Collaborator

wyfcyx commented Jul 10, 2023

@h888866j 没看到comments更新,有链接发一个?

@h888866j
Copy link
Contributor Author

5-4 scheduling 这里只是将 在掌握了进程间同学 改成了 在掌握了进程间通信。 和 提交时将CRLF 换成了 LF

并行处理需要了解更多的硬件并行架构问题和软件的同步互斥等技术,而深入的硬件并行架构目前不在本书的范畴之内,同步互斥等技术在后续章节才介绍。按道理需要先学习这些内容才能真正和深入理解本小节的内容,但本小节的内容在逻辑上都属于进程调度的范畴,所以就放在这里了。建议可以先大致学习本小节内容,在掌握了进程间同学、同步互斥等技术后,再回头重新学习一些本小节内容。

@h888866j
Copy link
Contributor Author

h888866j commented Jul 10, 2023

1-5 这里主要是本节中上下描述不一致问题,总得改一处或者标注一下。

剩下的 5 个通用寄存器情况如下:

zero( x0 ) 之前提到过,它恒为零,函数调用不会对它产生影响;

ra( x1 ) 是被调用者保存的。被调用者函数可能也会调用函数,在调用之前就需要修改 ra 使得这次调用能正确返回。因此,每个函数都需要在开头保存 ra 到自己的栈帧中,并在结尾使用 ret 返回之前将其恢复。栈帧是当前执行函数用于存储局部变量和函数返回信息的内存结构。

和下面的:

它的开头和结尾分别在 sp(x2) 和 fp(s0) 所指向的地址。按照地址从高到低分别有以下内容,它们都是通过 sp 加上一个偏移量来访问的:

 ra 寄存器保存其返回之后的跳转地址,是一个调用者保存寄存器;

 父亲栈帧的结束地址 fp ,是一个被调用者保存寄存器;

一个说是调用者保存,一个说是被调用者保存。

嗯,开始我觉的是 callee-saved, 因此还提过一个pr改成callee-saved #180 pr已经关了。

我的理解是:
每个函数、过程 都有自己的 return address, 自己负责保存自己的 ra 不会因为子函数调用发生改变,确保它自己能正确返回。

如果函数A 调用了 函数B,子函数B的 ra 相对于他的父级A而言,子函数是Callee,ra 就是Callee-saved(如果B是叶函数,ra甚至没必要保存);如果从父函数A的角度来看,父函数的 ra 也是它自己保存的,相对于 子函数B来言,父函数是 Caller, 父函数的 ra 的保存相对于子函数来说 就是 Caller-saved。这样两个函数的 ra 放一起解释 就容易说不清了。

如果从发生函数调用时 ra 寄存器是否被修改来看:一个函数如果有子函数调用:jal 跳转到子函数时 先修改了 ra = pc +4,因为会修改,所以需要保存,而等到了子函数里面,ra 已经变成 pc+4,子函数无法保存恢复 父函数的 ra。 那 ra 就需要是Caller-saved。

ra( x1 ) 是被调用者保存的。被调用者函数可能也会调用函数,在调用之前就需要修改 ra 使得这次调用能正确返回。因此,每个函数都需要在开头保存 ra 到自己的栈帧中,并在结尾使用 ret 返回之前将其恢复。栈帧是当前执行函数用于存储局部变量和函数返回信息的内存结构。

ra( x1 ) 是调用者保存的。调用函数(Caller)在调用子函数之前就需要修改 ra 使得子函数(Callee)调用能正确返回。而被调用函数(Callee)只要不是叶函数也会调用它的子函数,此时相对于它的子函数,它将变成Caller。 因此,每个函数都需要在开头保存 ra 到自己的栈帧中,并在结尾使用 ret 返回之前将其恢复以确保它自身能正确返回。栈帧是当前执行函数用于存储局部变量和函数返回信息的内存结构。

@h888866j
Copy link
Contributor Author

h888866j commented Jul 10, 2023

@h888866j 没看到comments更新,有链接发一个?

抱歉,我是直接在review意见那里回复的,好像除了自己都看不见。已重新添加成comments。

@wyfcyx
Copy link
Collaborator

wyfcyx commented Jul 22, 2023

抱歉最近有点忙。姑且都改成被调用者保存了,看看后面有没有更好的说法。

@wyfcyx wyfcyx merged commit 2e993ce into rcore-os:main Jul 22, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants