进程的虚拟地址空间包含1 GB的内核空间:
现在我假设这个1 GB的内核空间指向与内核相关的数据和代码(包括中断描述符表(IDT)).
现在让我们说CPU正在执行某个进程,这个进程进行了系统调用(触发了中断0x80(int 0x80)).会发生什么是CPU将转到IDT并执行与中断号相关的中断处理程序0x80.
现在CPU将保持在当前进程中,并从当前进程的内核空间执行中断处理程序(因此不会发生上下文切换)?
我读过,Linux 中的进程和线程是同一件事,例如在这个问题中它说:
Linux 上的线程和进程完全没有区别。
但我不明白进程和线程怎么可能意味着同一件事。我的意思是线程是由 CPU 执行的,而进程只是线程的“外壳”,它允许线程拥有共享内存。下图显示了进程及其线程之间的关系:
显然进程和线程并不意味着同一件事!
根据我的理解,当中断被触发时,CPU 会切换到内核态,而当中断被处理时,操作系统会将 CPU 切换回用户态。
现在我的问题是:
在NASM手册说:
3.4.2字符串
字符串由最多八个字符组成,用单引号('...'),双引号("...")或反引号(`...`)括起来.单引号或双引号等同于NASM(当然,用单引号围绕常量允许双引号出现在其中,反之亦然); 这些内容逐字表示.反引号中的字符串支持特殊字符的C风格\ -escapes.
我不明白为什么他们说一个字符串最多由八个字符组成,这是否意味着如果一个字符串由9个字符组成,它不被称为字符串?!
如果我有以下汇编代码:
mov eax, 123
mov ebx, 321
Run Code Online (Sandbox Code Playgroud)
NASM是否可以生成一个文件,显示我显示的汇编代码的相应机器代码,例如:
F2 FF A3 mov eax, 123
D7 D1 A1 mov ebx, 321
Run Code Online (Sandbox Code Playgroud)