操作系统(linux/windows)
文章平均质量分 92
操作系统(linux/windows)
lxlmycsdnfree
脑科学爱好者,物理爱好者,计算机从业者
展开
-
程序员必知的 89 个操作系统核心概念
与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。,在内核模式下,正在执行的代码具有对底层硬件的完整且不受限制的访问。:设备驱动程序,简称驱动程序(driver),是一个允许高级别电脑软件与硬件交互的程序,这种程序创建了一个硬件与硬件,或硬件与软件沟通的接口,经由主板上的总线或其它沟通子系统与硬件形成连接的机制,这样使得硬件设备上的数据交换成为可能。:是程序的更新、修复和(或)增强的集合,以一个独立的安装包的形式发布。原创 2024-07-08 10:00:48 · 1122 阅读 · 0 评论 -
Windows 下的 GUI 开发,真的太难了!
不过,Qt 使用的是 LGPL 许可证。如果你在一些论坛上询问关于在 Windows 上使用 C++ 编写 GUI 库的问题,大概率会收到一些“这不是一个好主意”等类似的反馈,甚至论坛上的专家们会直接建议你采用其他技术堆栈来编写应用程序的前端部分,然后将用 C++ 编写的功能作为组件或模块加载进来。为了改变这些空间的外观和风格,Samuel Tulach 需要为每一个控件编写一个专门的自定义绘制函数,这个过程不仅需要详细了解 Win32 API 的绘制机制,还需要大量的时间和精力投入。原创 2024-07-08 09:57:48 · 967 阅读 · 0 评论 -
Linux内核分析
当然内核进程可以通过并发的形式进行处理套接字连接,父进程监听,然后一旦有连接创建新的套接字连接对象,fork()新的进程去处理套接字数据的收发。后来linux对这块做了提升有了poll与epoll,poll就是将所以文件盘符句柄放在poll对象里面,同时poll还有事件字段,然后交给内核监听的时候,会转换成链表,内核放开了盘符数量的限制(本质上应该是有限制的,只是去掉了文件盘符总数的限制)。【注意:这里讲的select和poll内核进程一直在监听端口,把监听的连接对象的文件句柄信息丢到队列中;原创 2022-12-02 17:53:47 · 800 阅读 · 0 评论 -
从IO谈论编程的基础
当然我们使用的是高级开发语言,高级开发语言开发的程序有借助运行的虚拟机或者经过编译器编译之后都是本质调用系统的pthread. 这里举一个例子,对于java语言有中间运行的jvm,而且上面的资源全都是jdk封装的,如容器,内存的管理(堆栈),还有线程。要是网卡读取数据,网卡会告知系统最后的tcp/udp包结束。一个线程创建被执行之后,就会进入到内核态,内核就会给线程分配一个的空间,对于我们通常所说的内存管理是用户空间的内存管理,执行在内核中的线程会将操作的寄存器数据值写回到用户空间中对应的变量地址中。原创 2022-10-27 22:00:55 · 511 阅读 · 0 评论 -
linux android gradle构建机器 error while loading shared libraries: libz.so.1: cannot open shared object
原因:64位 linux 机器缺少32位lib相关的支持库如果yum 服务器上有 相关的库最好使用 yum 安装,其他 博客上使用 apt-file 安装。查看libz.so.1属于 glic 库包glibc.i686 2.12-1.166.el6_7.7 @base glibc.x86_64 2.14.1...原创 2018-06-27 21:24:44 · 1398 阅读 · 0 评论 -
linux 系统安装 升级glibc库2.14
首先要下载 rpm安装文件,使用rpm安装方式如果直接下载 tar.gz压缩包,解压ln -s -f /opt/glibc-2.14/lib/libc.so.6 /lib64/libc.so.6 ##强制创建软连接会把内核系统glibc 引用覆盖掉,导致内核出现问题所以不建议上述创建软连接的方式下载glibc2.14 rpm 安装包:这些文件都需要安装,在安装会提示冲突和依赖关系建议一下指令...原创 2018-06-14 17:15:49 · 5513 阅读 · 4 评论 -
解决strings: '/lib/libc.so.6': No such file
[root@uranuspreapp30 opt]# strings /lib64/libc.so.6 | grep GLIBC |tail -n 8strings: '/lib64/libc.so.6': No such file[root@uranuspreapp30 opt]# 首先想到的是不是系统安装的时候没有装libc,于是执行[root@localhost ~]# rpm -q...原创 2018-06-13 19:58:21 · 11575 阅读 · 3 评论 -
linux中yum与rpm区别
原文地址:https://blog.csdn.net/ziyun_xiaoyan/article/details/54341823一、源代码形式1. 绝大多数开源软件都是直接以原码形式发布的2. 源代码一般会被打成.tar.gz的归档压缩文件3. 源代码需要编译成为二进制形式之后才能够运行使用4. 源代码基本编译流程: 1).configure 检查编...转载 2018-06-28 14:55:10 · 4126 阅读 · 0 评论 -
linux redhat 6.3: /lib/libz.so.1: no version information available
linux gradle android 构建报错日志:原创 2018-06-28 20:15:33 · 2498 阅读 · 1 评论 -
linux 磁盘资源管理以及IO
柱面:Cylinder :一个环形磁道的面Cylinder =Track,早期的磁盘一个面上有1024个磁柱面;现在磁盘(服务器上的磁盘)做的很大,一个磁面上可以达到十几万的柱面数。磁道:Track : 一个柱面上存储的圆形轨道,也是的磁刀读取的轨道。扇区:Sector :一个磁道的最小存储单位,也是读取单位。一个扇面大小是512bytes,注意是一个磁道上的一个扇形弧线。柱面数: h...原创 2018-08-15 17:51:22 · 1433 阅读 · 0 评论 -
每个程序员都应该了解的内存知识【第一部分】
[编辑的话: Ulrich Drepper最近问我们,是不是有兴趣发表一篇他写的内存方面的长文。我们不用看太多就已经知道,LWN的读者们会喜欢这篇文章的。内存的使用常常是软件性能的决定性因子,而如何避免内存瓶颈的好文章却不好找。这篇文章应该会有所帮助。他的原文很长,超过100页。我们把它分成了7篇,每隔一到两周发表一篇。7篇发完后,Ulrich会把全文发出来。对原文重新格式化是个很有挑战性的工作,...转载 2018-07-02 17:05:42 · 485 阅读 · 0 评论 -
产生线程安全的原因(4)(操作系统)
3.4 指令缓存其实,不光处理器使用的数据被缓存,它们执行的指令也是被缓存的。只不过,指令缓存的问题相对来说要少得多,因为:执行的代码量取决于代码大小。而代码大小通常取决于问题复杂度。问题复杂度则是固定的。程序的数据处理逻辑是程序员设计的,而程序的指令却是编译器生成的。编译器的作者知道如何生成优良的代码。程序的流向比数据访问模式更容易预测。现如今的CPU很擅长模式检测,对预取很有利。代码永远都有良...原创 2018-07-02 16:36:12 · 503 阅读 · 0 评论 -
产生线程安全的原因(3)(操作系统)
3.3.3 写入时的行为在我们开始研究多个线程或进程同时使用相同内存之前,先来看一下缓存实现的一些细节。我们要求缓存是一致的,而且这种一致性必须对用户级代码完全透明。而内核代码则有所不同,它有时候需要对缓存进行转储(flush)。这意味着,如果对缓存线进行了修改,那么在这个时间点之后,系统的结果应该是与没有缓存的情况下是相同的,即主存的对应位置也已经被修改的状态。这种要求可以通过两种方式或策略实现...原创 2018-07-02 16:29:18 · 354 阅读 · 0 评论 -
说说I/O与IPC
程间通信IPC,也就是Inter-Process Communication的缩写。一个进程其实就是一个狭义上的程序。广义上:一个服务器也就是一个进程。比如客户端和服务器的连接就是两个进程在通信,只是这两个进程并不在同一台计算机上,它们进程间的通信方式就是我们非常熟悉的sockt接口,更下层一些可能就是TCP/IP协议。这样进程与进程间通信就组成了更大的一个系统,也就是说,在网络系统上原创 2017-05-01 15:14:06 · 947 阅读 · 0 评论 -
说说Java中原子性,可见性与指令重排序的理解
原子性:就是读数据,处理数据,写数据 这三个步骤不能被终止,或者打断;就是不能被线程调度器中断,切换线程。这样,才能保证,原子操作在切成切换,并行处理上保证数据地顺序累加处理。可见性:是Jvm较为突出的概念,其每一个线程有自己的工作内存空间,当某一个线程读取了主内存的数据,那么会通知其他线程中自己的内存空间此数据被加屏障,不可读;只能再次从主内存读数据缓存到自己的内存空间。指令原创 2017-05-02 11:39:18 · 917 阅读 · 0 评论 -
http并发,操作系统如何识别对应的进程,线程请求
系统识别哪一个进程中的哪一个线程发送的http请求,这个是由网络协议中的四元组(目的端口,ip和源端口,ip).线程都是向web服务器80 端口发送请求,但是源端口的分配是由系统自动分配,一旦分配成功之后,就会三次握手(基于tcp协议),建立网络通道。那么其他线程只能等待这个请求数据接收成功之后,再次请求建立网络连接。换句话说同一时间只能有一个线程对外建立网络连接。知道接收的数据包,结束之后,才会原创 2017-05-20 15:19:57 · 1659 阅读 · 0 评论 -
操作系统线程互斥,锁死机制的简单介绍
用户线程的切换,是内核决定,由调度器分配时间片调度到内核空间,转换成内核线程,然后指令重排序交给CPU.CPU没有执行过程中的中断时间,是不断的在运行,只是调度器提前将线程调度好,将多个线程的指令排好交给CPU。那么这种混合插入就是我们上层理解的线程调度。对CPU而言,所有的线程都是 串行的。对于一个多线程并发的多次处理或者重复处理一个任务,如果这个任务就是原子操作,(如读、写操作,先是寻址,原创 2017-05-18 11:39:33 · 1083 阅读 · 0 评论 -
用户态和内核态的区别
内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。为什么要有用户态和内核态?由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CP转载 2017-12-11 20:55:24 · 947 阅读 · 0 评论 -
通过零拷贝实现高效的数据传输(操作系统)
许多Web应用程序提供大量静态内容,这相当于从磁盘读取数据并将完全相同的数据写回到响应套接字。此活动似乎只需要相对较少的CPU活动,但效率有点低下:内核从磁盘读取数据并将其跨越内核用户边界推送到应用程序,然后应用程序将其推回到内核用户边界写出到插座。实际上,应用程序作为一个低效的媒介,将数据从磁盘文件获取到套接字。每次数据遍历用户内核边界时,都必须复制它,这会消耗CPU周期和内存带宽。幸运的是,您...转载 2018-04-12 22:38:20 · 874 阅读 · 0 评论 -
APR 以及linux安装apr 库目的
APR(Apache portable Run-time libraries,Apache可移植运行库),主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。在早期 的Apache版本中,应用程序本身必须能够处理各种具体操作系统平台的细节,并针对不同的平台调用不同的处理函数。那安装Apache的时候为什么必须安装Apr呢?在早期的Apache版本中,应用程序本身必须能够处理各种...转载 2018-06-12 11:35:13 · 4262 阅读 · 0 评论 -
产生线程安全的原因(1)(操作系统)
所有线程共享主内存每个线程有自己的工作内存refreshing local memory to/from main memory must comply to JMM rules产生线程安全的原因线程的working memory是cpu的寄存器和高速缓存的抽象描述:现在的计算机,cpu在计算的时候,并不总是从内存读取数据,它的数据读取顺序优先级 是:寄存器-高速缓存-内存。线程耗费的是CPU,...原创 2018-06-29 20:41:45 · 563 阅读 · 0 评论 -
产生线程安全的原因(2)(操作系统)
3.3.2 Cache的性能测试用于测试程序的数据可以模拟一个任意大小的工作集:包括读、写访问,随机、连续访问。在图3.4中我们可以看到,程序为工作集创建了一个与其大小和元素类型相同的数组:struct l { struct l *n; long int pad[NPAD];};n字段将所有节点随机得或者顺序的加入到环形链表中,用指针从当前节点进入到下一个节点。pad字段用来存储数据,其...原创 2018-07-02 16:20:36 · 188 阅读 · 0 评论