Linux操作系统
pk_20140716
缘起于BIOS,发展于内核,直至进程启动,电脑的世界开启了!
展开
-
《深入理解程序设计》之计算机体系结构
在学习编程时,你首先要了解计算机如何解释程序。当然,你无需拥有电子工程学位,但需要理解一些基本概念。现代计算机的体系结构都是在冯诺依曼体系结构(因其创始人而得名)的基础上发展起来的。冯诺依曼体系结构蒋计算机划分成两个主要组成部分:CPU(中央处理单元)和内存。这种架构被用在包括个人计算机,超级计算机,大型机在内所有现代计算机,甚至手机中。2.1 内存结构为理解计算机内存的结构,可以蒋计算机内存与你家附近的邮局做个比较。邮局通常有一个摆满邮政信箱的房间,计算机内存就像邮局房间里的信箱一样,每个固定大小的原创 2022-02-15 11:57:43 · 233 阅读 · 0 评论 -
语法树
int a,b,c,d;d=(a+b)*c原创 2019-12-03 13:20:15 · 204 阅读 · 0 评论 -
怎样高效写汇编代码
C语言中有变量的概念,而汇编里没有。变量指定了内存中占用的字节数,对它的读写可以通过其地址来引用 ,所以我们可以像C语言一样定义数据类型,并将变量名写入汇编代码中。之后在将变量名替换为地址。举例.section .rodata .LC0:.string "%d,%d\n".text.global mainmain: pushl %ebp movl %esp,%ebp sub...原创 2019-12-02 11:04:55 · 141 阅读 · 0 评论 -
从C语言到汇编(三)函数实现之局部变量
以sum函数为例int sum(int a,int b){ return a+b;}它的汇编代码.text.global sumsum: pushl %ebp movl %esp,%ebp movl 8(%ebp),%eax addl 12(%ebp),%eax leave ret然后是main函数int main(void){ int a; int b=...原创 2019-11-21 10:41:29 · 239 阅读 · 0 评论 -
从C语言到汇编(三)函数实现之参数传递和函数返回值
以sum函数为例int sum(int a,int b){ return a+b;}它的汇编代码.text.global sumsum: pushl %ebp movl %esp,%ebp movl 8(%ebp),%eax addl 12(%ebp),%eax leave ret然后是main函数int main(void){ int a; int b=...原创 2019-11-21 10:27:40 · 892 阅读 · 0 评论 -
从C语言到汇编(三)循环语句
while语句是3种循环语句的一种。如果条件满足则不断执行。看代码。#include <stdio.h>int main(void){ int x=0; while(x*x<1000) { printf("%d\n",x*x); x++; } return 0;}看汇编代码。.section .rodata .LC0:.string "%d\n...原创 2019-11-20 13:33:45 · 244 阅读 · 0 评论 -
从C语言到汇编(三)if语句
if从最简单的if语句开始。#include <stdio.h>int main(void){ int a; scanf("%d",&a); if((a&1)==0) { printf("is even!"); } return 0;}最简单的if语句如上。我们将其转化为汇编。.section .rodata .LC0:.strin...原创 2019-11-20 12:46:49 · 773 阅读 · 0 评论 -
从C语言到汇编(二)输入输出函数
日常运行程序时,我们经常要用到输入输出函数。输入经常来自于键盘,输出经常用于屏幕。而C语言标准库提供了相应的函数scanf和printf。scanf函数和printf函数的函数原型是:int scanf(const char *format, ...);int printf(const char *format, ...);可以看出它们都是参数可变的函数。举个例子。#include ...原创 2019-11-19 16:56:55 · 399 阅读 · 0 评论 -
从C语言到汇编(二)类型装换
在C语言中,很多情况会进行隐式的算术类型转换。一般来说,如果二元运算符的两个操作数具有不同的类型,那么在进行运算之前先要把“较低”的类型提升为“较高”的类型。运算的结果为较高的类型。转换规则:首先,如果任何一个操作数为long double类型,则将另一个操作数转换为long double 类型。否则,如果任何一个操作数为double类型,则将另一个操作数转换为double类型。否则,如果任...原创 2019-11-16 10:47:07 · 194 阅读 · 0 评论 -
从C语言到汇编(二)表达式
C语言变量,常量,运算符组成表达式。在这里我写上几个重要的表达式以及其汇编代码。数字交换int main(void){ int a=1; int b=0; int tmp; tmp=a; a=b; b=tmp; return 0;}汇编代码.text.global mainmain: pushl %ebp movl %esp,%ebp subl $...原创 2019-11-15 17:30:02 · 121 阅读 · 0 评论 -
从C语言到汇编(二)++/--运算
相信C语言的使用者对++/–运算符不会陌生吧。又是前缀,又是后缀的++/–一定让你感到困惑吧!其实以前我也是这样的,不过在学习了汇编以后,我看了C语言生成的汇编代码,这才彻底的理解了++/–运算符。先从最简单的++运算符开始吧。int main(void){ int a=0; a++; ++a; return 0;}汇编代码.text.global mainmain...原创 2019-11-15 17:10:32 · 149 阅读 · 0 评论 -
从C语言到汇编(二)位运算
从C语言到汇编(二)算术运算存储程序式计算机以二进制来表示数据和指令。所以,我们可以对二进制位进行一些操作。这些操作包括了与(&),或(|),异或(^),取反(~),算术左移(<<),逻辑左移(<<),算术右移(>>),逻辑右移(>>)。与与运算01000101可以用与操作来屏蔽某些位。#i...原创 2019-11-14 16:41:04 · 261 阅读 · 0 评论 -
从C语言到汇编(二)算术运算
变量,常量,运算符可以构成表达式,表达式也可以构成语句。本文将详细介绍加(+),减(-),乘(*),除(/),取余(%)运算符。加#include <stdio.h>int main(void){ int a=10; int b=20; int c; c=a+b; printf("sum=%d\n",c); return 0;}sum=30c语言代码...原创 2019-11-14 11:45:03 · 211 阅读 · 1 评论 -
关于操作系统
操作系统为我们在烦杂的机器设备上提供了一层抽象。我们面对的是统一的操作系统,使用统一的系统调用,使用硬件的资源。操作系统在设备上进行了抽象处理。对于外部存储设备,UNIX统一认为是块设备,对块设备使用文件系统,所以我们面对的不在是硬盘,u盘...而是一棵文件树。我们使用open,read,write,close对文件进行操作。原创 2015-06-01 19:45:48 · 439 阅读 · 0 评论 -
Linux 概念架构的理解
摘要Linux kernel 成功的两个原因:灵活的架构设计使得大量的志愿开发者能够很容易加入到开发过程中;每个子系统(尤其是那些需要改进的)都具备良好的可扩展性。正是这两个原因使得Linux kernel可以不断进化和改进。一、Linux内核在整个计算机系统中的位置Fig 1 - 计算机系统分层结构分层结构的原则:the dependencies be转载 2015-12-09 21:02:11 · 354 阅读 · 0 评论 -
关于操作系统
分层 计算机是分层的,这是计算机的复杂性和大量的需求导致的。 复杂性体现在设备的多样性,单机模拟多任务,硬件中断机制带来的不确定性等。 大量的需求体现在人们对计算设备的需求,以及计算设备减少大量的劳动力,以及计算设备能完成大量劳动力也无法完成的事。 复杂性带来操作的不便,大量需求需要快速方便的操作计算机。在这个矛盾下,计算机科学家将计算机分层。 硬件设备是最基础的一层。硬件根据命令完成任务原创 2015-06-07 17:51:03 · 297 阅读 · 0 评论 -
linux系统解疑
1.进程死亡后变为僵尸进程的原因 Linux和UNIX总有着剪不断理还乱的亲缘关系,僵尸进程的概念也是从UNIX上继承来 的,而UNIX的先驱们设计这个东西并非是因为闲来无聊想烦烦其他的程序员。僵尸进程中保存着很多对程序员和系统管理员非常重要的信息,首先,这个进程是 怎么死亡的?是正常退出呢,还是出现了错误,还是被其它进程强迫退出的?其次,这个进程占用的总系统CPU时间和总用户CPU时间分原创 2015-10-03 19:54:20 · 369 阅读 · 0 评论