- 博客(32)
- 收藏
- 关注
转载 『阿男的技术分享』*Java Native Interface(下)*
『阿男的技术分享』*Java Native Interface(下)*接下来我们写一个HelloJNI.c来实现这个HelloJNI.h:#include <jni.h>#include <stdio.h>#include "HelloJNI.h"// Im...
2017-02-11 21:07:00 149
转载 『阿男的技术分享』*Java Native Interface(上)*
『阿男的技术分享』*Java Native Interface(上)*我们知道Java本身的实现,很大一部分是用C++写的。实际上,Java也允许我们和原生平台的代码进行交互。Java定义了一个接口规范,就叫做Java Native Interface,通过这个接口规范,我们就可以让Jav...
2017-02-11 21:06:00 115
转载 『阿男的Linux内核世界』*多核CPU是如何启动的?*
『阿男的Linux内核世界』*多核CPU是如何启动的?*大家有没有想过,多核CPU是如何启动的?BIOS代码由哪个核心执行?此外,Kernel从BIOS接管过来CPU的使用权以后,Kernel运行在哪个核心里面?这些问题大家都可以想一下,阿男给大家慢慢解答。首先是阿男一直推荐大家看的In...
2017-02-11 21:06:00 743
转载 『阿男的Linux内核世界』*Kernel的动态内存管理Slab Allocator*
『阿男的Linux内核世界』*Kernel的动态内存管理Slab Allocator*Linux Kernel有自己的动态内存管理机制,叫做Slab Allocator,它可以预先把计算机的实际内存空间给划分成固定大小的区块,然后把这些区块分配给请求内存的各个Process使用。我们可以通...
2017-02-11 21:04:00 188
转载 『阿男的工程世界』*让我们简单聊一下IO(4)*
『阿男的工程世界』*让我们简单聊一下IO(4)*最后,阿男给大家讲一下Memory Mapped IO,这个是完全由操作系统实现的一种设计。所谓Memory Mapped IO,就是在我们操作文件的时候,不是直接操作这个文件本身的数据,而是先把文件的数据拷贝到内存。Linux系统不叫copy...
2017-02-11 21:02:00 118
转载 『阿男的工程世界』*让我们简单聊一下IO(3)*
『阿男的工程世界』*让我们简单聊一下IO(3)*接下来阿男给大家讲一讲DMA,DMA全称Direct Memory Access,这个是做什么用的呢?早期的计算机设计下,硬件如果要使用内存里面的数据,CPU要负责这些内存的操作:把内存的数据传给硬件设备,把硬件设备的数据写入内存。这些操作要...
2017-02-11 21:01:00 94
转载 『阿男的工程世界』*让我们简单聊一下IO(2)*
『阿男的工程世界』*让我们简单聊一下IO(2)*我们来考虑一下不同设备之间速度不匹配的协调问题。首先,最快的设备应该是CPU本身这里,但是CPU也最忙,要协调处理周边设备。CPU内部的内存,就是寄存器,是可以和CPU本身匹配的内存设备。现代的CPU还配备L1 Cache,L2 Cache这些...
2017-02-11 21:00:00 114
转载 『阿男的工程世界』*让我们简单聊一下IO(01)*
『阿男的工程世界』*让我们简单聊一下IO(01)*在计算机的世界里,可能最复杂的不是计算,而是IO。为什么这么讲?因为IO意味着和外部世界打交道,这就需要理解和处理外部世界的复杂。CPU并不是纯计算单元,它要和内存打交道,要和各种外部设备打交道。这些外部的硬件,基本上没有在时钟频率,也就是...
2017-02-11 20:46:00 105
转载 『阿男教你玩Concurrent Programming』*学习的脉络(1)*
『阿男教你玩Concurrent Programming』*学习的脉络(1)*大家觉得并发编程学习起来很难,其实这块主要是知识体系比较庞大,设计比较多,理论学习比较漫长,找到一个学习的脉络,学习起来就不难。阿男这里给大家先梳理一下。首先我们要明白并发编程要解决什么问题。所谓并发,本质上就是...
2017-02-11 20:43:00 94
转载 『阿男教你玩转Concurrent Programming』*学习的脉络(2)*
『阿男教你玩转Concurrent Programming』*学习的脉络(2)*为了解决协调并发执行循序,协调资源的使用这两个问题,人类做了大量的研究,产生了很多的研究结果,制造了很多解决实际问题的工具。而我们要学习的就是这些东西了。为了协调并发执行顺序和协调资源的使用,我们需要协调的手段...
2017-02-11 20:35:00 101
转载 『阿男的Linux内核世界』*17 什么是硬件中断*
『阿男的Linux内核世界』*17 什么是硬件中断*这次我们讲讲硬件中断,硬件中断是CPU接受到的硬件发来的信号,比如我们使用键盘敲入一个字符,这个信号就是要发给CPU来处理。那么为了接受到这种信号,肯定是要在键盘和CPU之间有某种连接才可以。现在的键盘一般是通过USB接口连接的,USB接...
2017-01-18 03:24:00 133
转载 『阿男的编程本质论』*11 Eval,Macro,Preprocessor,Homoiconicity(四)*
『阿男的编程本质论』*11 Eval,Macro,Preprocessor,Homoiconicity(四)*最后我们说说Haskell。Haskell并不是Homoiconic的语言,而且Haskell也不需要Macro。为什么呢?因为Haskell有自己非常完善的类型系统的设计,而且Ha...
2017-01-17 11:32:00 111
转载 『阿男的编程本质论』*10 Eval,Macro,Preprocessor,Homoiconicity(三)*
『阿男的编程本质论』*10 Eval,Macro,Preprocessor,Homoiconicity(三)*那么Clojure这种macro和C语言里面#include这种macro有什么区别呢?C语言里面的macro实际上就是一种文本替换,比如#include "foo.h"在编译的时候...
2017-01-16 11:17:00 133
转载 『阿男的Linux内核世界』*16 从User Space到Kernel Space(四)*
『阿男的Linux内核世界』*16 从User Space到Kernel Space(四)*这次我们学习Linux的各种中断处理的入口,也就是entry。关于Linux的中断入口,Kernel代码自带的文档就写得非常好,位于Documentation/x86/entry_64.txt^1,大...
2017-01-14 00:30:00 126
转载 『阿男的编程本质论』*09 Eval,Macro,Preprocessor,Homoiconicity(二)*
『阿男的编程本质论』*09 Eval,Macro,Preprocessor,Homoiconicity(二)*我们这次来讨论Clojure的macro,我们看看这段Clojure代码:$ java -jar clojure-1.8.0.jarClojure 1.8.0user=>...
2017-01-12 23:40:00 105
转载 『阿男的Gradle学习笔记』 *02*使用Gradle编译Java项目
『阿男的Gradle学习笔记』 *02*使用Gradle编译Java项目Java代码目录结构默认遵循maven的规范:$ tree.├── build.gradle└── src └── main └── java └── org └── weli └─...
2017-01-12 19:29:00 112
转载 『阿男的Linux内核世界』*15 从User Space到Kernel Space(三)*
『阿男的Linux内核世界』*15 从User Space到Kernel Space(三)*我们目前知道了,当interrupt发生时,Kernel会暂时打断Process在User Space的运行,转到Kernel Space处理中断。此外,我们知道了interrupt大体可以分为三类,...
2017-01-12 06:49:00 134
转载 『阿男的Gradle学习笔记』*01*Gradle的安装与使用
『阿男的Gradle学习笔记』*01*Gradle的安装与使用Gradle的下载地址在这里^1。下载解压后,在.bash_profile中配置相关路径:# Gradleexport GRADLE_HOME=/Users/weli/projs/gradle-2.14export PAT...
2017-01-11 22:13:00 119
转载 『阿男的编程本质论』*08 Eval,Macro,Preprocessor,Homoiconicity(一)*
『阿男的编程本质论』*08 Eval,Macro,Preprocessor,Homoiconicity(一)*阿男这次想跟大家聊聊语言设计里面的几个概念,分别是Eval,Macro,Preprocessor和Homoiconicity。首先是Eval,我们在很多语言里都可以看到它的影子,比...
2017-01-11 11:23:00 115
转载 『阿男的Linux内核世界』*14 从User Space到Kernel Space(二)*
『阿男的Linux内核世界』*14 从User Space到Kernel Space(二)*我们知道了Intel架构的CPU的指令权限是按照Ring的级别来进行区分的:Kernel Space会使用Ring 0获得CPU的全部使用和管理权限,User Space使用Ring 3,获得计算机有...
2017-01-10 01:32:00 145
转载 『阿男的Linux内核世界』*13 从User Space到Kernel Space(一)*
『阿男的Linux内核世界』*13 从User Space到Kernel Space(一)*Linux操作系统在设计上分为两部分,分别是User Space和Kernel Space。我们在这篇文章里讲解一下,一个Process是如何在User Space与Kernel Space之间切换运...
2017-01-09 03:43:00 179
转载 『阿男的Linux内核世界』*12 Kernel Space和User Space*
『阿男的Linux内核世界』*12 Kernel Space和User Space*阿男在这篇文章里面给大家讲讲Linux的Kernel Space和User Space。我们知道,Linux操作系统和早期的Windows系统相比起来,最大的特色就是「基本上不会死机」。稍微年龄比较大的计算...
2017-01-06 04:13:00 193
转载 『阿男的技术日志』*02 处理Git项目当中既有Windows文件又有Linux/Unix/MacOS文件的问题*...
『阿男的技术日志』*02 处理Git项目当中既有Windows文件又有Linux/Unix/MacOS文件的问题*我们一般在处理git的line ending时,一般会把core.autocrlf设置为input模式:$ git config --global core.autocrlf...
2017-01-05 04:35:00 173
转载 『阿男的工程世界』*04 ldd,objdump与patchelf*
『阿男的工程世界』*04 ldd,objdump与patchelf*我们可以使用ldd命令来查看一个binary file(二进制可执行文件)的共享库,以httpd为例:[weli@fedora sbin]$ ldd httpd linux-vdso.so.1 (0x00007fffe3...
2017-01-05 04:33:00 355
转载 『阿男的Linux内核世界』*11 Process和Thread的设计*
『阿男的Linux内核世界』*11 Process和Thread的设计*阿男给大家在这篇文章里面讲解一下Linux针对Process和Thread的设计。我们在学习操作系统设计的时候,知道了Process是一种比较"重"的设计:每一个Process都拥有独立的内存空间,独立的生命周期;同时...
2017-01-04 14:40:00 278
转载 『阿男的编程本质论』*08 正则表达式是万能的吗?*
『阿男的编程本质论』*08 正则表达式是万能的吗?*我们在日常当中使用正则表达式搜索各种字符串,但是手里有这么厉害的一个工具,我们也必须知道它的局限所在。阿男之前开了个NFA和DFA的专题^1,共计10篇文章,主要是为大家介绍了正则表达式背后的有限状态自动机,也就是Finite Autom...
2017-01-04 05:18:00 168
转载 『阿男的工程世界』*03 POSIX AIO vs. Native AIO*
『阿男的工程世界』*03 POSIX AIO vs. Native AIO*POSIX AIO是标准的C语言库提供的一个异步式IO的框架。因为它是libc里面提供的,所以它是运行在USER SPACE里面。USER SPACE里面实现AIO可以有多种方式,而POSIX AIO是用pthrea...
2017-01-03 00:56:00 204
转载 『阿男的技术日志』*01 Bash的Here Document的使用方法*
『阿男的技术日志』*01 Bash的Here Document的使用方法*Bash支持<< 加上一个标记符号来进行多行输入stdin。比如下面这样的使用方法:$ sed 's/-/_/g' << EOF> 1-2> 3-4> EOF1_2...
2017-01-02 03:07:00 197
转载 『阿男的Haskell进阶学习笔记』*02 `type`关键字*
『阿男的Haskell进阶学习笔记』*02 type关键字*我们这次介绍两个关键字,分别是type和newtype。首先是type,这个关键字可以允许我们来把一种data type给做一下命名。比如我们常用的String,实际上就是[Char]的代名词,我们可以通过ghci的:i命令验证这...
2017-01-02 02:48:00 255
转载 『阿男的Haskell进阶学习笔记』*01 开篇*
『阿男的Haskell进阶学习笔记』*01 开篇*阿男之前在豆瓣上连载了Haskell的系列学习文章^1,介绍了一些Haskell的基础知识。接下来阿男想开一个新的专栏,继续深入介绍一下Haskell语言的方方面面,以及一些更高阶的Haskell方面的内容。这个专栏里面会更佳深入地讨论Has...
2017-01-02 02:28:00 161
转载 『阿男的Linux内核世界』*10 wait当中status参数的含义*
『阿男的Linux内核世界』*10 wait当中status参数的含义*我们在上篇文章里,学习了wait函数的使用方法,这篇文章里阿男带大家看一下wait函数里面status参数的具体含义。我们先复习一下wait函数的定义:pid_t wait(int *status);在C语言的世界...
2017-01-01 19:01:00 573
转载 『阿男的Linux内核世界』*09 wait的使用方法*
『阿男的Linux内核世界』*09 wait的使用方法*我们这篇文章里来写段代码使用wait函数:#include <sys/wait.h>#include <stdlib.h>#include <unistd.h>#include <std...
2017-01-01 18:47:00 99
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人