kernel

Python学习之-- IO 操作

浪尽此生 提交于 2020-04-03 04:09:46
阻塞IO / 非阻塞IO /IO多路复用 / 异步IO 说明:同步IO包含(阻塞IO / 非阻塞IO /IO多路复用),因为他们有个共同特性就是都需要内核态到用户态的一个等待。 基本概念解释,环境限定为linux: 1:用户空间和内存空间 首先操作系统是采用虚拟存储器,就32位系统来说,它的虚拟存储空间是2的32次方==4G,操作系统的核心是内核,它是独立于普通的应用程序,它可以访问受保护的内存空间,底层硬件等,为保障用户进程不能直接操作内核,操作系统将虚拟存储空间分为2部分,分为:内核空间和用户空间,内核空间将最高的1G字节(寻址:0xC0000000到0xFFFFFFFF)分配使用,最低的3G字节分配给用户空间,供进程使用。 2:进程切换 也就类似线程切换,由内核将正在CPU上执行的进程挂起,然后恢复以前挂起的进程,这就是进程切换。所以进程都是在操作系统的内核的支持下运行的。与内核紧密相连 从一个进程切换到另一个进程,运行过程如下: 1:保存处理机上下文,包括程序计数器和寄存器 2:更新PCB信息 3:把进程的PCB移入相应的队列, 4:选择另一个进程执行,并更新其PCB 5:更新内存管理的数据结构 6:恢复处理机上下文 3:进程的阻塞 当正在执行的进程运行期间,由于所期待的事情未发生,如(请求资源失败,某种操作的完成,新数据尚未到达等),则由系统自动执行阻塞原语

Windows Embedded CE 6.0 Internals (5) The Mechanism of API

元气小坏坏 提交于 2020-03-29 03:46:18
引言 一般的,我们在编写用户态程序(包括 普通的应用程序 、 服务程序 、用户态驱动、 一些扩展插件 )时,每当我们遇到一个不熟悉的API,我们就会打开开发文档,或者MSDN,查查每个参数是怎么填的。(我想你应该没把这些API给背下来了吧^^) 我们在调试时发现执行到这些API时是跟不进去的,那么你想过它们是如何进入操作系统里面工作的吗?它们又是如何在操作系统里面工作的? 比如文件系统的一个API: HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ); 那么这系列文章就是尝试弄清楚这些的一些问题。但是在实际摸索过程中我发现这些远比我想象中复杂,甚至经常迷失了。如果你发现文章有不对的或者可以改进的地方请不吝赐教。 在没有文档的情况下去研究CE的源码是件比较吃力的事,这就是我分享这一系列文章的原因。不管你是在CE平台还是在嵌入式Linux平台下面开发,深入一下CE内部都是件有趣并且有意义的事

尝试在virtualbox虚拟机中fedora30中实现文件夹共享

ε祈祈猫儿з 提交于 2020-03-28 20:44:45
$ sudo dnf install gcc kernel-devel kernel-headers dkms make bzip2 perl $ rpm -qa|grep kernel|sort 确认 kernel与kernel-devel是否一致,我的kernel版本是系统安装后提示更新的,devel是刚刚安装的,都是最新的,这里版本是一致的。不一致的话可以执行 $sudo -y upgrade kernel kernel-devel$reboot $ sudo ln -s /usr/src/kernels/5.1.11-300.fc30.x86_64 /usr/src/linux (注意:最新的平衡版本5.1.11-300.fc30.x86_64) 折腾了好久不成功,最后升级比新的virtualbox版本,终于6.0.8上折腾成功。要注意virtualbox中访客机的共享文件设置 $ mkdir mnt/share  # 确保挂在点是存在的# modprobe vboxsf  # 启动vbox的服务,这里需要root权限# mount -t vboxsf Lenovo_Linux /mnt/share   # Lenovo_Linux:上图共享文件夹名称(有网友说因为共享的是文件夹,需要在后面加‘/’, 单我尝试不对,否则出现报错路径 # 不在etc/sftab中

卷积 Convolution 原理及可视化

只愿长相守 提交于 2020-03-28 19:18:21
文章抄自 知乎-王贵波 本文主要介绍了卷积 Convolution 的背景、基本原理、特点、与全连接的区别与联系、不同的卷积模式,进行了卷积可视化以及代码实现了一个简单的 2 维卷积操作,并针对卷积操作进行了计算优化。 目录 卷积背景及原理 卷积的特点(与全连接的区别与联系) 卷积的三种模式 卷积操作 Numpy 简单实现 卷积优化实现 卷积背景及原理 卷积操作历史上来发展于信号处理领域,在信号处理中原始信号通常会被混入噪音,假设传感器在每个时刻 \(t\) 会输出一个信号 \(f(t)\) ,这个信号通常混入了一些噪声,我们可以通过过个测量点进行加权平均来抵消掉噪声,并且离当前时间点 \(t\) 越近的测量点权重应该越高,我们可以用下面的公式表示 \[h(t)=\sum_{t'}g(t-t')f(t') \] 上式中 \(g\) 是一个权重函数,参数是时间点 \(t'\) 距离当前时间 的 \(t\) 距离,输出 \(t'\) 时间点测量的权重; \(f\) 是信号测量函数。在这个例子中, \(t'\) 的采样是离散的,因此采用了加和的形式,同时 \(g\) 还应该是一个概率密度函数,因为在这个例子中表示了一种权重。下图就是这个例子的可视化,灰色是 \(f(t)\) ,红色的部分就是经过翻转的 \(g\) ,绿色部分是生成的 \(h\) 。 这个例子实际上就是卷积操作的一种特例

THP关闭方法-Transparent Pages

陌路散爱 提交于 2020-03-25 17:50:32
#这里只针对CentOs7系统,内核3.10,grub2 #修改/etc/default/grub,在GRUB_CMDLINE_LINUX中添加transparent_hugepage=never,如下 GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=system/root rd.lvm.lv=system/swap rhgb quiet transparent_hugepage=never" grub2-mkconfig -o /boot/grub2/grub.cfg grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg #但是这里有个问题,重启机器后,defrag一直是always,而不是never,但是也不影响使用, #我还没有弄明白defrag的作用,从字面意思是整理内存碎片的作用,按理说应该不影响使用,但是有问题,重启机器后,又变成never了。 #下面是解决disable THP的推荐方法(机器重启后THP仍旧是关闭的): #disable-transparent-hugepages脚本内容,放到/etc/init.d/下, #并授权可执行权限chmod 755 /etc/init.d/disable-transparent-hugepages,并加入开机自启动chkconfig -

centos6.4内核升级到4.9版本

好久不见. 提交于 2020-03-25 17:14:39
linux 内核升级 [root@master ~]# uname -r 2.6.32-431.el6.x86_64 内核下载官网: http://www.kernel.org 内核下载官网: https://mirrors.edge.kernel.org/pub/linux/kernel/ 1.下载源码包 wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.122.tar.xz 2.安装升级组件 yum -y groupinstall "Development Tools" yum -y install ncurses-devel qt-devel hmaccalc zlib-devel binutils-devel elfutils-libelf-devel 3.解压源码包 tar xvf linux-4.9.122.tar.xz [root@master docker]# cd linux-4.9.122 [root@master linux-4.9.122]# cp /boot/config-2.6.32-431.el6.x86_64 . 将当前系统的配置文件复制到要升级的内核文件中,使用当前系统的内核配置更新到新内核上面。 4.更新内核并备份当前内核 [root@master linux-4.9.122]

Error 13 When trying to run my Jupyter Notebook

你说的曾经没有我的故事 提交于 2020-03-24 09:42:11
问题 I am not sure what happened but I am no longer able to run my Jupyter notebooks. I am getting the following error Traceback (most recent call last): File "C:\Users\asher\Anaconda3\lib\site-packages\tornado\web.py", line 1699, in _execute result = await result File "C:\Users\asher\Anaconda3\lib\site-packages\tornado\gen.py", line 742, in run yielded = self.gen.throw(*exc_info) # type: ignore File "C:\Users\asher\Anaconda3\lib\site-packages\notebook\services\sessions\handlers.py", line 72, in

[Debug]Kernel Panic学习(一)

穿精又带淫゛_ 提交于 2020-03-23 09:34:12
linux内核调试常见方法 1,可能导致kernel panic的原因有: ARM捕捉到的异常 (KE) 指令异常:程序跑飞,可能跑到数据区里执行 访问无效地址:执行存取指令时抛出异常(访问了kernel space没有映射的内存) 代码主动发出的异常 (KE) 调用BUG()/BUG_ON()函数 软件卡死导致看门狗复位 (无法调度) (HWT) 代码出现死锁 中断被关太久(中断频繁) 硬件卡死导致看门狗复位 (HW_REBOOT) CPU硬件卡死(bus hang) 虚焊/断路/短路等PCB问题 器件不良 2,内核的assert()函数 assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。果assert()返回失败,系统会强制因为assertion failed而panic,并将内存映象存入crash dump文件。 3,Crash工具学习 crash主页 内核部分的KEXEC+KDUMP的配置请参考:http://www.ibm.com/developerworks/cn/linux/l-cn-dumpanalyse/ # cp /proc/vmcore mydumpfile 正常linux内核发生异常的时候系统重启,那么重启之后系统内存里的异常信息就全部丢失了

Linux Kernel简介

微笑、不失礼 提交于 2020-03-23 09:06:53
copy from : http://gityuan.com/2016/04/01/linux-kernel-map/ 一. Linux全局观 先来看一幅Linux kernel map:点击查看 大图 这是makelinux网站提供的一幅非常经典的Linux内核图,涵盖了内核最为核心的方法. Linux除了驱动开发外,还有很多通用子系统,比如CPU, memory, file system等核心模块,即便不做底层驱动开发, 掌握这些模块对于加深理解整个系统运转机制还是很有帮助。 二. Kernel源码目录结构 简要列举Kernel 源代码 的常见目录: 目录 解释 部分子目录 kernel 内核管理相关,进程调度等 sched/fork等 fs 文件子系统 ext4/f2fs/fuse/debugfs/proc等 mm 内存子系统 drivers 设备驱动 staging/cpufreq/gpu等 arch 所有CPU体系结构相关的代码 armm64/x86等 include 头文件 linux/uapi/asm_generic等 lib 标准通用的C库 ipc 进程间通信相关 init 初始化过程(非系统引导阶段) block 块设备驱动程序 - crypto 加密、解密、校验算法 - Documentation 说明文档 - 三. 资料 lxr.free-electrons

Linux五大网络IO模型

爷,独闯天下 提交于 2020-03-22 18:25:08
对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有),它们都是处于虚拟地址空间中。 用户进程是无法访问内核空间的,它只能访问用户空间,通过用户空间去内核空间复制数据,然后进行处理 。 1、阻塞io(同步io):   发起请求就一直等待,直到数据返回。好比你去商场试衣间,里面有人,那你就一直在门外等着。(全程阻塞)    2、非阻塞io(同步io):    不管有没有数据都返回,没有就隔一段时间再来请求,如此循环。好比你要喝水,水还没烧开,你就隔段时间去看一下饮水机,直到水烧开为止。 (复制数据时阻塞)      当用户进程发出read操作时,如果kernel(内核空间)中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error。从用户进程角度讲 ,它发起一个read操作后,并不需要等待,而是马上就得到了一个结果。用户进程判断结果是一个error时,它就知道数据还没有准备好,于是它可以再次发送read操作。一旦kernel中的数据准备好了,并且又再次收到了用户进程的system call,那么它马上就将数据拷贝到了用户内存( 此时占用CPU阻塞 ),然后返回。 3、 多路复用 io(同步io):     I/O是指网络I/O, 多路指多个TCP连接(即socket或者channel),复用指复用一个或几个线程