
linux与操作系统
文章平均质量分 58
Linux与操作系统
才大难为用
我不懒
展开
-
计算机图形学 之 直线裁剪算法
使用计算机处理图形信息时,计算机内部存储的图形往往比较大,而屏幕显示的知识图形的一部分。因此需要确定图形哪些部分落在显示区内,哪些落在显示区外。这个选择的过程就称为裁剪。最简单的裁剪方法是把各种图形扫描转换为点之后,再判断点是否在窗口内。要裁剪一条直线段,首先要判断(如下图所示):它是否完全落在裁剪窗口内? 它是否完全在窗口外? 如果不满足以上两个条件,则计算它与一个或多个裁剪边界的交点(比如线段AB)。常用的裁剪算法由三种,即 Cohen-Suther land、中点分割法、Liang-原创 2021-09-22 19:12:55 · 2300 阅读 · 1 评论 -
Linux 之 elf格式
可重定位文件(Relocatable File) .o)包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据。 可执行文件(Executable File) .exe) 包含适合于执行的一个程序,此文件规定了exec() 如何创建一个程序的进程映像。 就好象.o是一个debug版本,.exe是一个release版本,当然不仅仅是这样。.o根本就不能执行。elf是linux可执行文件。elf大致可分为三部分:elf头、程序头表、节区头表首先,ELF文件格式提...原创 2021-02-16 15:30:04 · 987 阅读 · 0 评论 -
Linux 之 Wine与FQ
sudo apt install wine安装什么软件直接 wine 软件名字就可以了,然后就会在桌面上出现图标。卸载,它会释放出一个uninstall的脚本,点击它就可以了。原创 2021-02-14 21:59:10 · 153 阅读 · 0 评论 -
Linux 之 磁盘管理
低级格式化是分区,高级格式化是建立文件系统,因此我们一般不会使用低级格式化,使用低级格式化必然使用高级格式化,低级格式化是安装操作系统时使用,高级格式化是平常删除文件使用。linux的磁盘管理最重要的术语就是挂载,linux各个文件夹的作用:/bin 二进制可执行命令,/ b i n目录包含了引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。这些命令都是二进制文件的可执行程序( b i n是b i n a r y - -二进制的简称),多是系统中重要的系统文件。系统所需要的那些命令位于此原创 2021-01-29 12:32:52 · 190 阅读 · 0 评论 -
Linux应用 之 namespace
namespace 是 Linux 内核用来隔离内核资源的方式。通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程的相关资源指定在同一个 namespace 中。Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 里的原创 2020-09-06 11:23:23 · 392 阅读 · 0 评论 -
Linux内核 之 GDT LDT与分段
全局描述符表GDT(Global Descriptor Table)在整个系统中,全局描述符表GDT只有一张(一个处理器对应一个GDT),GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址,程序员将GDT设定在内存中某个位置之后,可以通过LGDT指令将GDT的入口地址装入此寄存器,从此以后,CPU就根据此寄存器中的内容作为GDT的入口来访问GDT了。GDTR中存放的是GDT在内存中的基地址和其表长界原创 2020-07-13 10:58:29 · 2168 阅读 · 0 评论 -
Linux应用(一)文件
d代表目录-代表普通文件b代表块文件l代表链接文件原创 2020-06-15 14:23:22 · 159 阅读 · 0 评论 -
Linux内核(九)共享内存
共享内存是进程间通信中最简单的方式之一。共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。共享内存在各种进程间通信方式中具有最高的效率。并不需要通过系统调用或者其它需要切入内核的过程来完成。同时它也避免了对数据的各种不必要的复制。通常用信号量进行同步。进程通过调用shmget(Shared Memory GET,获取共享内存)来分配一个共享内存块。感觉自己用不上。...原创 2020-05-16 15:33:31 · 304 阅读 · 0 评论 -
Linux内核(七)消息队列
消息队列本质上是位于内核空间的链表,链表的每个节点都是一条消息。每一条消息都有自己的消息类型,消息类型用整数来表示,而且必须大于 0。每种类型的消息都被对应的链表所维护,消息类型为 0 的链表记录了所有消息加入队列的顺序,其中红色箭头表示消息加入的顺序。消息队列提供了一个从一个进程向另一个进程发送数据块的方法,每个数据块都可以被认为是有一个类型,接受者接受的数据块可以有不同的类型。它有一个不足就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数(MSGMNB),系统上消息队列的原创 2020-05-16 14:51:57 · 923 阅读 · 0 评论 -
Linux内核(六)信号量
信号量本质上是一个计数器,这里可能就要问了,为啥不设置一个全局变量做计数器呢?是因为进程间是相互独立的,而这不一定能看到,看到也不能保证++引用计数为原子操作,而信号量的PV操作是原子操作。它和管道有所不同,它不以传送数据为主要目的,它主要是用来保护共享资源(信号量也属于临界资源),使得资源在一个时刻只有一个进程独享。一个信号量 S 是个整型变量,它除了初始化外只能通过两个标准原子操作:wait () 和 signal() 来访问:操作 wait() 最初称为 P(荷兰语proberen,测试);原创 2020-05-16 10:28:03 · 249 阅读 · 0 评论 -
Linux内核 之 进程调度
将可运行进程组织成一个队列,扫描整个可运行队列并计算进程的优先级,从中选出优先级最高的进程以替代当前占用CPU的进程。但它有一个非常致命的缺陷,随着进程数量的增加,扫描所花费的时间也随之增加。2.6版本内核采用了一种较为复杂的调度策略。这种策略解决了进程调度时间随进程数量增加的问题。它在一个固定时间内找到最佳进程。所以也被称为O(1)算法。linux中进程的优先级范围为0~MAX_PRIO-1,其中实时进程优先级范围是0~MAX_RT_PRIO-1,非实时进程优先为MAX_RT_PRIO~MAX_P原创 2020-05-11 21:58:15 · 194 阅读 · 0 评论 -
Linux内核 之 进程
Linux内核主要包括:进程创建及调度,线程创建及调度,内核数据结构及系统调用,中断,内存管理,文件系统在研究 Linux 实现之前,首先要对进程、进程组、会话,线程有个整体的了解:一个会话包含多个进程组,一个进程组包含多个进程,一个进程包含多个线程。当计算机开机的时候,内核(kernel)只建立了一个init进程。Linux内核并不提供直接建立新进程的系统调用。剩下的所有进程都是init进程通过fork机制建立的。新的进程要通过老的进程复制自身得到,这就是fork。fork是一个系统调用。进程存活原创 2020-05-11 16:59:32 · 391 阅读 · 0 评论 -
Linux内核 之 中断
中断处理函数所作的第一件事情是什么?答案是屏蔽中断,所以要屏蔽中断,是因为新的中断会再次调用中断处理函数,导致原来中断处理现场的破坏。因为中断,它是把原来的上下文都存起来,如果是多级中断的话,它需要存多级的上下文,除非Linux能存多级上下文,感觉是能多存的。如果只能存一级,那必然是要屏蔽中断,不然上下文就会覆盖丢失。另外,既然屏蔽了,就会有新的问题->中断丢失,解决方法就是将中断函...原创 2020-05-07 15:35:30 · 207 阅读 · 0 评论 -
Linux内核 之 并发,互斥与自旋锁
自旋锁最初就是为了SMP系统设计的,实现在多处理器情况下保护临界区。只有在SMP系统中的自旋锁才需要真正“自旋”。在早期的Linux内核中,并发源相对较少。内核不支持对称多处理器(SMP)系统,唯一导致并发问题的原因是中断。对称多处理器结构 (SMP: Symmetric Multi-Processor),有许多紧耦合多处理器,在这样的系统中,所有的CPU共享全部资源,如总线,内存和I/O系...原创 2020-05-07 15:35:22 · 294 阅读 · 0 评论 -
Linux内核(七)用TCP实现FTP
还是希望说,能有一个cd命令,有ls命令不过分的。原创 2020-05-03 23:27:32 · 382 阅读 · 0 评论 -
Linux内核(六)并发式TCP
多线程服务器是对多进程服务器的改进,由于多进程服务器在创建进程时要消耗较大的系统资源,所以用线程来取代进程,这样服务处理程序可以较快的创建。据统计,创建线程与创建进程要快 10100 倍,所以又把线程称为“轻量级”进程。线程与进程不同的是:一个进程内的所有线程共享相同的全局内存、全局变量等信息,这种机制又带来了同步问题。例如,在accept的时候,由于两个客户端相连太近了,导致上一个进程还没有把字...原创 2020-05-03 22:15:46 · 197 阅读 · 0 评论 -
Linux内核(五)TCP/UDP
关于TCP/UDP的网络编程,在Linux下,是以文件为基础的。以下是UDP的框架图。从图中可以看出,就是一次交互,不存在连上了,然后能一直交互,没得。客户端要发起一次请求,仅仅需要两个步骤(socket和sendto),而服务器端也仅仅需要三个步骤即可接收到来自客户端的消息(socket、bind、recvfrom)。大名鼎鼎的socket函数:#include <sys...原创 2020-05-01 22:21:09 · 332 阅读 · 0 评论 -
Linux应用 之 信号
1. 信号实质上是一种软件层面上对中断的模拟。2. 信号机制的根本是每个进程都维护着一张信号表,通过信号表的操作。信号是用位图存的,只有一个bit。3. 信号的转发需要经过内核控制,这是为了安全考虑。4. 信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达。5. 收到信号的进程三种处理方法,其实信号就像中断,要么不理它,要么就用中断函承接,要么就用默...原创 2020-05-01 11:04:00 · 265 阅读 · 0 评论 -
Linux应用 之 管道
管道是Linux由Unix那里继承过来的进程间的通信机制管道需要在内核和用户空间进行四次的数据拷贝:由用户空间的buf中将数据拷贝到内核中 -> 内核将数据拷贝到内存中 -> 内存到内核 -> 内核到用户空间的buf。而共享内存则只拷贝两次数据:用户空间到内存 -> 内存到用户空间。这是它底层原理的事,不是很懂。管道用循环队列实现,连续传送数据可以不限大小。共享内存...原创 2020-04-30 22:57:07 · 663 阅读 · 0 评论 -
Linux应用 之 进程开辟
进程开辟就三个函数,int system(const char *string);string:shell命令字符串返回值:成功返回命令退出码,这个命令退出码就是各个程序自己的return 回来的那个码;如果无法启动shell,返回127错误码,其他错误,返回-1。system函数,在启动新进程时,必须先启动shell进程,因此使用system函数的效率不高。system函数必须等...原创 2020-04-30 21:09:42 · 222 阅读 · 0 评论 -
Linux内核 之 IPC概述
此图清楚的展现了Linux的IPC机制。其中,最初Unix IPC包括:管道、FIFO、信号;System V IPC包括:System V消息队列、System V信号灯、System V共享内存区;Posix IPC包括: Posix消息队列、Posix信号灯、Posix共享内存区。Posix为:由于Unix版本的多样性,电子电气工程协会(IEEE)开发了一个独立的Unix...原创 2020-04-30 20:55:26 · 798 阅读 · 0 评论 -
Linux内核 之 内存管理,伙伴系统,slab
Linux内存管理1. 进程被分配的内存都是虚拟内存,看起来好像是由1GB内核使用的内存+3GB自己可以使用的内存构成。2.全局描述符表GDT(Global Descriptor Table)在整个系统中,全局描述符表GDT只有一张(一个处理器对应一个GDT),GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄存器GDTR...原创 2020-04-23 22:54:56 · 399 阅读 · 0 评论