[Linux]优先级反转解释

看到一张比较好的解释优先级反转的示意图如下:
当优先级比较低的C任务获取到信号量运行时,优先级为高的A任务因为条件触发需要执行,但是需要的信号量此时被c获得,所以只能等待。

CPU回到任务C继续运行,但是如果此时优先级为中的任务B因为条件出发需要执行,则CPU会切换到任务B,运行完成之后再回到任务C,一直到任务C运行结束释放信号量,此时任务A才能开始运行。

此种情况导致了优先级为中的B任务占用CPU早于优先级为高的A任务。所以称为优先级反转。

解决:

一般使用的方法有两种:优先级天花板及优先级继承,两者理念其实差不多。

优先级天花板是指,当任务C获取完共享资源之后,把任务C的优先级提升到最高优先级,可以保证中间不会被打断,尽早释放资源。

优先级继承是指:当任务C获得资源运行是,高优先级任务A尝试获取资源,此时发现自已被C占用,则比较C与A的优先级高低,若C的优先级低,则把C的优先级提升至A同样等级。

 

[PYTHON]Ubuntu1604安装python3.6

Ubuntu 1604默认python3的版本为3.5, 并不能直接通过输入apt-get install的命令来安装python3.6,因为python3.6并不在ubuntu 1604的官方源里,所以需要手动添加,然后再安装。(1610版本之后应该不需要)

命令如下:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6

安装库:
可以使用如下命令安装库
python3.6 -m pip install

 

[PYTHON] apache2 CGI运行python脚本

ubuntu 1604 apache2默认并未开启CGI python支持,需要进行手动配置。

首先编辑/etc/apache2/apache2.conf,增加以下配置:
<Directory /var/www/html/>
Options +ExecCGI
PassEnv LANG
AddHandler cgi-script .py
</Directory>

AddHandler python-program .py

配置完成之后运行service apache2 restart重启服务。

测试:
在/var/www/html新建python文件

#!/usr/bin/python
print “Content-type: text/html\n”
print “Hello, world!”

保存之后更改文件权限,加入可执行权限。
此时,可以通过浏览器运行相应的文件。如果运行显示的是内容,而不是运行结果,原因可能是没有load cgi模块,则需要运行sudo a2enmod cgi,然后重启apache服务即可。若想要获取url传入参数,可以使用cgi库

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import cgi
print(“Content-Type: text/html\n”)
print(“Hello, world!”)
arguments = cgi.FieldStorage()
for i in arguments.keys():
    print(i)
    print(arguments[i].value)

运行结果如下: