操作系统知识记录

进程与线程

进程:一个运行着的程序叫做进程,包含了该程序的地址空间和该程序所需要的系统资源。
线程:在一个程序中的多个执行路线就叫做线程。

  • 线程优点:开销小,切换速度快,线程切换时操作系统做的工作少。
  • 缺点: 1)写多线程程序要仔细,共享变量会引发问题。 2)多线程程序调试会很困难
  • 线程同步:信号量,互斥量。
  • 互斥量和信号量的区别:1)互斥是指同一时刻只允许一个线程对某一资源的访问,具有唯一性和排他性,但无法限制访问者对资源的访问顺序。同步是指在互斥的基础上,通过其他机制实现访问者对资源的有序访问。2)互斥量值只能为0/1,信号量值可以为非负整数 。3) 互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。
  • 一个线程只能属于一个进程,但一个进程可以拥有多个线程;多线程处理就是允许一个进程在同一时刻执行多个任务
  • 线程没有地址空间,线程包含在进程的地址空间中。所有线程共享进程的内存和资源,共享代码段(代码和常量),数据(全局变量和静态变量),扩展段(堆)。但每个线程都有自己的栈段,有自己寄存的局部变量和临时变量。

信号

信号是Linux系统响应某些条件而产生的一个事件。接受到该信号的进程会相应地采取一些行动。信号是由某些错误条件而产生的,如内存段冲突、浮点处理器错误或者非法指令。比如在 Terminal 中通过键盘敲入 Ctrl+C 组合,就会向正在运行地程序发送 SIGINT 信号,这将引起程序地终止。

进程间通信

进程间的通信主要包括以下几种
1)管道(pipe)从一个进程流向另一个进程,单向流动,父进程和子进程之间使用
2)命名管道(FIFO)能在不相关的进程中传递数据,先进先出
3)信号量:用于管理对临界资源的访问,信号量是一个特殊的变量,取正整数。并且程序对他的访问都是原子操作。

// P操作,passeren(传递),
P(sv);
if(sv > 0)
{
	sv--;
	//执行功能
}
else if(0 == sv)
{
	wait();		//等待
}

// V操作, vrijgeven(给予或释放)
if(有进程正在等待sv)
{
	//恢复挂起的进程;
}
else
{
	sv++;
}

4)共享内存:用于程序之间高效地共享数据,允许两个不相关的进程访问同一逻辑内存。具体实现:把不同进程之间共享的内存安排在同一段物理内存,并未提供同步机制,一般用共享内存来提供对大块内存区域的有效访问,同时通过传递小消息来同步。同步方法:信号量、消息队列、信号。
5)消息队列,在程序之间传递数据的一种简单方法。消息队列和FIFO的区别:
6)套接字

TCP 和 UDP 的区别

1)TCP提供面向连接的传输,通信前要先建立连接(三次握手机制);UDP提供无连接的传输,通信前不需要建立连接。

2)TCP提供可靠的传输(有序,无差错,不丢失,不重复);UDP提供不可靠的传输。

3)TCP面向字节流的传输,因此它能将信息分割成组,并在接收端将其重组;UDP是面向数据报的传输,没有分组开销。

4)TCP提供拥塞控制和流量控制机制;UDP不提供拥塞控制和流量控制机制。

为什么要用线程池

为了减少创建和销毁线程的次数,让每个线程可以多次使用,可根据系统情况调整执行的线程数量,防止消耗过多内存,所以我们可以使用线程池。

硬中断和软中断

  • 硬中断是由硬件产生的,处理中断的驱动是需要运行在CPU上的,因此,当中断产生的时候,CPU会中断当前正在运行的任务,来处理中断。
  • 软中断的处理非常像硬中断。然而,他们仅仅是由当前正在运行的进程产生的。通常,软中断是一些对I/O的请求。这些请求会调用内核中可以调度I/O发生的程序。对于某些设备,I/O请求需要被立即处理,而磁盘I/O请求通常可以排队并且可以稍后处理。

交叉编译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值