- 博客(7)
- 资源 (7)
- 收藏
- 关注
原创 armv8平台下sleep函数的实现
sleep函数是比较常用的api,那么在arm平台下它是怎么实现的呢?要实现sleep函数必须要有三个方面的支持,中断系统,timer和wfi指令。这是无需多言的,sleep需要有时间参数,能够准确定位时间的就只有timer了,要让timer工作中断又是必不可少的。那么wfi是什么呢?其实wfi是arm的一条指令,全称是wait for interrupt。这个指令的作用是一旦执行就进入睡眠低...
2018-11-30 18:59:22 1062
原创 armv8 system timer的控制
armv8的系统定时器时钟源是在SOC上,且每个pe上有一个timer。pe可以通过访问寄存器的方式来读和控制timer。timer有关的寄存器主要有三类:控制寄存器,倒计时寄存器和比较寄存器。我们只关心virtual timer。最下面的是控制寄存器,中间是倒计时寄存器,最上面是比较寄存器。使用timer时先设置倒计时寄存器或比较寄存器,然后将控制寄存器bit0置1.这样等到条件满足,时...
2018-11-29 19:13:29 2750
原创 操作系统真象还原线程调度的理解
操作系统真象还原是一本介绍如何从零实现一个操作系统的比较不错的书。作者用通俗易懂的语言把操作系统的实现原理非常清晰的讲解出来,非常适合初学者。但是即便已经写的非常好了,读者依然需要认真思考才能将很多问题想清楚。线程调度就是其中一个。书的第九章是介绍线程的实现以及如何调度的。比较难以理解的是线程调度关于switch_to的理解,源码如下:/* 实现任务调度 */void schedule...
2018-11-18 22:59:03 349
原创 docker在Ubuntu中不能正常启动的解决办法
docker有时候会不能正常工作,有时候非得重启机器才行,确实很麻烦。根据我的经验,在Ubuntu中docker出现的一般性问题都比较容易解决。首先清理docker运行中的所有进程和产生的文件stop docker,如果用systemctl的话就是systemctl stop docker,remove在/run目录下所有跟docker相关的东西。#systemctl stop doc...
2018-11-10 09:19:40 11881
原创 关于c的头文件的几个问题
学c很多年来只是知道、那些律法般的规则,直到实战才知道其真正的含义。问题1. 关于防止嵌套包含宏定义开关在每个头文件的开头和结尾是头文件的宏定义开关:#ifndef XXXX#define XXXX--------#endif这是为了防止在一个源文件中重复引用同一个头文件造成的重引用。我可以理解在同一个问题中防止嵌套的功用,但是如果两个源文件同时引用同一个头文件呢,...
2018-11-07 11:39:28 249
原创 linux 内存映射(x86)
在x86架构中,虚拟地址映射到物理地址要经过段地址转换和页映射两步,但是平时我们只关心页映射忽略掉段机制。原因在于linux中段的起始地址都是0,相当于虚拟地址与段地址划等号。因此一般在介绍地址转换时只讨论页映射机制。 Intel早期的架构中段地址起着较大的作用,在页式存储兴起后,为了兼容不得不保留段地址转换,其实这一步是没有必要的,在其他的架构中地址转换就是虚拟地址到物理地址,没有中...
2018-11-03 17:46:58 288
原创 linux的线程调度
linux的进程和线程是有点奇怪的,分为内核线程、用户进程和用户线程,这里分类的依据是调度。内核里面只有一个进程活动区域,因此里面所有运行着的都是线程。调度器是由内核实现的,内核是看不到用户线程的,因此调度器能够调度的是内核线程和用户进程。用户线程是有用户进程进行调度的。但是一般的开发者是不会自己实现线程调度器的,他们一般使用成熟的线程库,由线程库中的负责线程的创建和调度。操作系统会把用户进程...
2018-11-03 10:44:56 1955
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人