操作系统
文章平均质量分 81
xiaofei0859
这个作者很懒,什么都没留下…
展开
-
Linux系统调用解析
什么是系统调用? Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。用户可以通过系统调用命令在自己的应用程序中调用它们。从某种角度来看,系统调用和普通的函数调用非常相似。区别仅仅在于,系统调用由操作系统核心提供,运行于核心态;而普通的函数调用由函数库或用户自己提供,运行于用户态。 随Linux核心还提供了一些C语言函数库,这些转载 2016-04-13 10:05:13 · 684 阅读 · 0 评论 -
进程和线程、协程的区别
现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来。python中有协程库gevent,py web框架tornado中也用了gevent封装好的协程。本文主要介绍进程、线程和协程三者之间的区别。一、概念 1、进程进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通...转载 2019-04-01 17:51:45 · 656 阅读 · 0 评论 -
多线程还是多进程的选择及区别
鱼还是熊掌:浅谈多进程多线程的选择关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。 经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有转载 2017-09-25 16:57:13 · 1042 阅读 · 0 评论 -
Linux Page Cache的工作原理
1 、前言 自从诞生以来,Linux 就被不断完善和普及,目前它已经成为主流通用操作系统之一,使用得非常广泛,它与Windows 、UNIX 一起占据了操作系统领域几乎所有的市场份额。特别是在高性能计算领域,Linux 已经成为一个占主导地位的操作系统,在2005年6月全球TOP500 计算机中,有 301 台部署的是 Linux 操作系统。因此,研究和使用 Linux 已经成为开发转载 2017-07-14 14:42:38 · 6586 阅读 · 0 评论 -
Linux top VIRT RES SHR SWAP DATA内存参数详解
Linux top VIRT RES SHR SWAP DATA内存参数详解转载:http://blog.csdn.net/u011547375/article/details/9851455 其实很早之前就想开博客,写一写码农几年自己积攒下来的知识与见解。看过很多文章有过很多感触,有些收获很值得梳理一下认真思考反思的。今天就先从基本的top开始吧,在网上看了很多关于top讲解内存参转载 2017-07-04 11:03:15 · 836 阅读 · 0 评论 -
cpu显示信息
在使用top命令的时候会看到这么一行:里面的各个值分别是什么意思呢?今天被问到这个问题,发现答的不是很清楚。果然啊,天天用最多的top命令都还没摸透。。。惭愧。。。于是就查了些资料:官方解释Cpu(s)表示的是cpu信息。各个值的意思是:us: user cpu time (or) % CPU time spent in user space转载 2017-07-04 10:47:03 · 306 阅读 · 0 评论 -
[arm驱动]linux等待队列阻塞中断IO的应用
《[arm驱动]linux等待队列阻塞中断IO的应用》涉及内核驱动函数四个,内核结构体零个,分析了内核驱动函数四个;可参考的相关应用程序模板或内核驱动模板一个,可参考的相关应用程序模板或内核驱动一个一、概念: 要休眠进程,必须有一个前提:有人能唤醒进程,而起这个人必须知道在哪儿能唤醒进程,这里,就引入了“等待队列”这个概念。二、应用场景: 等待队列用来实现进程的阻塞,等转载 2017-06-22 16:31:31 · 599 阅读 · 0 评论 -
Linux内核:通过wait_event和wake_up内在机制分析等待队列
等待队列在Linux内核中,等待队列是一个非常重要的概念,也是一个非常重要的机制。我们会在很多函数当中用到等待队列的知识,例如completion机制、wait_event机制等等。在解释这些机制之前,我们首先要弄清楚什么是等待队列。在linux内核里面,我们将进程分为以下几种状态:可运行状态(TASK_RUNNING) 处于这种状态的进程,要么正在运行,要么正准备被CPU调度转载 2017-06-22 16:18:33 · 1205 阅读 · 0 评论 -
linux设备驱动中的阻塞与非阻塞(二)
上一节我们分析了Linux驱动中阻塞的实现,利用等待队列的休眠和唤醒机制实现,这一节我们探讨一下非阻塞的实现!其实在非阻塞中,我们可以直接打开一个设备,进行读取和写入操作,但是这样做很不好,因为使用的是非阻塞,所以无论能不能写入或者读取都会返回,就像小明去买衣服,去到商店,商店开门了,买了衣服回来,这固然是好,可是万一商店老板来晚了一分钟,小明看到一关门就回去了,要是他等待多一分钟,就可以转载 2017-06-22 16:12:35 · 316 阅读 · 0 评论 -
linux设备驱动中的阻塞与非阻塞(一)
这两天在搞Linux驱动的阻塞和非阻塞,困扰了两天,看了不少博客,有了点自己的想法,也不知是否对错,但还是写写吧,让各位大神给我指点指点。 首先说说什么是阻塞和非阻塞的概念:阻塞操作就是指进程在操作设备时,由于不能获取资源或者暂时不能操作设备时,系统就会把进程挂起,被挂起的进程会进入休眠状态并且会从调度器的运行队列移走,放到等待队列中,然后一直休眠,直到该进程满足可操作的条件转载 2017-06-22 16:11:50 · 511 阅读 · 0 评论 -
Linux下新系统调用sync_file_range提高数据sync的效率
我们在做数据库程序或者IO密集型的程序的时候,通常在更新的时候,比如说数据库程序,希望更新有一定的安全性,我们会在更新操作结束的时候调用fsync或者fdatasync来flush数据到持久设备去。而且通常是以页面为单位,16K一次或者4K一次。 安全性保证了,但是性能就有很大的损害。而且我们更新的时候,通常是更新文件的某一个页面,那么由于是更新覆盖操作,对文件系统的元数据来讲的话,无需变更,所以转载 2016-04-13 17:34:57 · 4816 阅读 · 0 评论 -
内核缓冲区
应用缓冲技术能很明显的提高系统效率。内核与外围设备的数据交换,内核与用户空间的数据交换都是比较费时的,使用缓冲区就是为了优化这些费时的操作。其实核心到用户空间的操作本身是不buffer的,是由I/O库用buffer来优化了这个操作。比如fread本来从内核读取数据时是比较费时的,所以一次取出一块,以避免多次陷入内核。 应用内核缓冲区的 主要思想就是一次读入大量的数据放在缓冲区,需要的转载 2016-04-13 18:32:32 · 1439 阅读 · 0 评论 -
linux read/write和fread/fwrite有什么区别
1,fread是带缓冲的,read不带缓冲.2,fopen是标准c里定义的,open是POSIX中定义的.3,fread可以读一个结构.read在linux/unix中读二进制与普通文件没有区别.4,fopen不能指定要创建文件的权限.open可以指定权限.5,fopen返回指针,open返回文件描述符(整数).6,linux/unix中任何设备都是文件,都转载 2016-04-13 17:10:10 · 9611 阅读 · 0 评论 -
内核态(Kernel Mode)与用户态(User Mode)
内核态(Kernel Mode)与用户态(User Mode)内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序用户态: 只能受限的访问内存, 且不允许访问外围设备. 占用CPU的能力被剥夺, CPU资源可以被其他程序获取为什么要有用户态和内核态由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内转载 2016-04-13 16:37:47 · 1341 阅读 · 0 评论 -
linux用户态和内核态理解
1、特权级 Intel x86架构的cpu一共有0~4四个特权级,0级最高,3级最低,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查。硬件已经提供了一套特权级使用的相关机制,软件自然要好好利用,这属于操作系统要做的事情,对于UNIX/LINUX来说,只使用了0级特权级别和3级特权级。也就是说在UNIX/LINUX系统中,一条工作在0级特权级的指令具有了CP转载 2016-04-13 16:18:58 · 667 阅读 · 0 评论 -
linux系统调用和库函数调用的区别
Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。可以参考《Linux程序设计》(英文原版为《Beginning Linux Programming》,作者是Neil Matthew和Richard Stones)第三章: Working with files。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底转载 2016-04-13 10:17:00 · 331 阅读 · 0 评论 -
线程之间共享哪些资源
同一进程间的线程究竟共享哪些资源呢,而又各自独享哪些资源呢?共享的资源有:一个。堆由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此新出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)湾 全局变量它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的C。静态变量虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量...转载 2019-04-01 18:46:44 · 8417 阅读 · 1 评论