- 博客(35)
- 收藏
- 关注
原创 Python运行时环境
允许有多个进程(Interpreter)存在,但通常只有一个Interpreter,这个Interpreter维护了一个或多个PyThreadState对象。Python在初始化时会创建一个主线程,所以其运行时环境中存在一个主线程,可以有多个线程。Python实现了对多线程的支持,而且一个线程就是操作系统上的一个原生线程。通过PyThreadState对象实现,所以可以将该对象视为线程本身的抽象。某一个PyFrameObject就是执行环境,一整个为执行环境。注:线程切换之前要保存关于当前线程的信息。
2024-08-29 21:27:06
384
原创 Python虚拟机
运行之前:运行时环境的初始化,与执行环境有区别运行之中:虚拟机的运行框架(具体实现过程)+运行时环境编译----->虚拟机运行Python虚拟机是否就在编译过程中生成PyCodeObject对象上进行所有操作?不是,PyCodeObject对象有字节码指令序列以及关于程序的所有静态信息,但是缺少程序运行的动态信息:名字空间、运行时栈、变长对象等。
2024-08-29 17:57:39
177
原创 栈与栈帧[源码层面]
栈帧是函数调用过程的活动记录,是虚拟机在实现过程/函数调用中使用的一种数据结构,使得虚拟机可以利用EBP寄存器访问局部变量、参数、函数返回值等数据。不是,因为PyCodeObject对象有字节码指令序列以及关于程序的所有静态信息,但是缺少程序运行时的动态信息(名字空间、运行时栈、变长对象)进栈(PUSH指令)会对ESP寄存器的值进行减法运算,使之减去4个字节(32位)或8(64位),然后将操作数写倒ESP指针所指向的内存中。出栈(POP指令)先从栈指针指向的内存中读取数据,然后再将栈指针的数值加上4/8。
2024-08-29 10:50:14
134
原创 python解释器[源代码层面]
/存储me_key的散列值,维护该值是避免每次查询时重新计算entry生存周期的四种状态unused态:me_key/me_value都是null(entry在初始化的时候)。Active态:entry存储了键值对的状态。Dummy态:me_key指向dummy对象(伪删除)。Pending态:键!=空,值=空(仅拆分),尚未插入到拆分表中。/*字典中项的数量*//*表示字典中对象版本*/#else/*表示字典中对象版本*/#endif。
2024-08-28 21:47:52
923
原创 Cpython-Object对象概述
在Python中,对象就是为C中的结构体在堆上申请一堆内存,不能被静态初始化,不能在栈空间上生存。但 Python中的类型对象是例外,都是被静态初始化的。一个对象被创建,在内存中大小是不变的,所以维护容纳一个可变长度数据的对象(如:List类型),就必须在对象内维护一个指向一块可变大小区域的指针。
2024-08-24 21:51:12
355
原创 Linux下的随机数生成器
这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH Keys,SSL Keys等)需要它们提供的随机数据流。它同样使用熵池来收集随机事件,但在熵池中的随机性不足时,它会通过算法生成伪随机数来填补空缺。它使用熵池(entropy pool)来收集系统中的各种随机事件,如键盘输入、鼠标移动、当这些随机事件发生时,它们会被加入熵池,并由一个算法将其转化为随机数。如果熵池中的随机性不足,读取。一种是/dev/random或/dev/urandom:是Linux系统中提供的。
2024-08-23 16:52:52
344
原创 动态链接库
dlopen是一个在许多操作系统(如 Linux 和 UNIX 类系统)中用于动态加载共享库(共享对象文件)的函数。它允许程序在运行时加载和卸载共享库,从而支持动态链接库的使用。这种机制使得程序可以在运行时根据需要加载特定的功能模块,而不是在编译时就固定所有依赖。
2024-08-20 20:07:45
461
原创 ctypes简单学习
ctypes是Python的外部函数库,提供与C兼容的数据类型,并允许调用DLL或共享库中的函数。可使用该模块以纯 Python形式对这些库进行封装。Linux与Windows平台不同,使用方法也有所不同,本文聚焦于Linux平台。
2024-08-19 20:21:38
311
原创 python源码中零碎知识
该文件定义了与随机数生成相关的接口和数据结构,提供了对内核态代码生成随机数的支持。这些随机数生成功能通常用于增强内核的安全性和可靠性,尤其是在需要高质量随机数的场景下,例如加密和安全密钥生成。这些标志组合在一起通常用于安全地打开文件,特别是在处理文件写入操作时。这些函数允许程序在运行时加载和使用共享库,而不是在编译时链接。这个标志可以影响调用的阻塞行为,使得在没有足够熵的情况下,调用不会阻塞。类型是在 POSIX 标准的信号量中定义的,它用于实现线程间同步。是一个配置文件,根据不同的平台和编译选项生成的。
2024-07-26 16:38:20
685
原创 树莓派3B+操作系统烧录
最近需要验证再在x86平台上交叉编译后的python代码是否能正常运行在ARM平台,手头刚好有一个树莓派,就拿来装个系统玩玩。
2024-07-17 12:26:48
284
原创 二、python及第三方库编译
在x86-64平台上生成arm平台上可执行的代码,在x86-64平台上编译python和python依赖库与第三方库,使之能运行在arm平台上。
2024-07-17 12:20:06
658
原创 一、ubuntu20.04交叉编译环境配置arm-linux-gnueabihf-gcc
在ubuntu上源码构建python,编译结果适用x86-64平台,接下来需要编译python的C代码,使之适用于arm平台,方便后续操作。
2024-07-16 20:47:47
1340
原创 [问题解决]inux下为arm开发板交叉编译openssl报错arm-linux-gcc.br_real: error: unrecognized command line option ‘-m64‘
1.进入目录后,执行./config no-asm --shared --prefix=/home/zoe/Downloads/arm_python_lib/rely/openssl CC=arm-linux-gnueabihf-gcc。--prefix=/home/zoe/Downloads/arm_python_lib/rely/openssl CC=arm-linux-gnueabihf-gcc:构建路径;3.继续修改Makefile,还要把该文件中的所有-m64标记删除,正常情况下应该有两处。
2024-07-16 10:52:19
323
原创 [问题解决]window和虚拟机ubuntu之间不能进行复制粘贴
最近使用ubuntu20.04,频繁出现复制粘贴有问题。...........回头再补。
2024-07-12 16:02:09
139
原创 [问题解决]ubuntu开机黑屏进入tty模式,无法进入图形化界面
环境:虚拟机 ubuntu20.04执行命令sudo apt-get remove --auto -remove pythoon3.10.12卸载系统自带的python重启之后再进系统就进入tty界面。
2024-07-12 15:19:39
625
原创 wsl的挂载目录
wsl即Windows Subsystem for Linux,是一个运行在windows上的轻量版子操作系统Linux,通过windows的应用商店安装ubuntu,并开启hype-v,即可使用。此时可以将挂载目录当作wsl上的目录,如将文件复制到windows的桌面。wsl中有一个功能,可以将windows的目录挂载到wsl中。
2024-07-12 10:16:24
233
原创 如何写一个makefile
一个工程中源代码不计其数,其按类型、功能、模块分别放在若干个目录中。如src:.c/.cpp源代码include:.h头文件lib:libxx.so/libxx.a库bin:生成的二进制文件obj:生成的.o文件,用于下一步的动态链接makefile制定了一系列规则来指定 哪些文件需要编译,怎么编译的,先后顺序是怎么样的。makefile就像shell脚本一样,可以执行操作系统的命令,只需要make,make clean指令即可实现自动化编译和自动化删除构建的文件,极大提高了开发效率。
2024-07-12 10:04:25
318
原创 Linux系统编程-unistd.h头文件
在Unix类操作系统(如:Linux 、MacOS)中提供对POSIX(可移植操作系统接口)操作系统API的访问。它定义了许多系统调用和库函数,用于与操作系统内核进行交互,包括文件操作、进程控制、环境管理。
2024-07-11 15:49:47
348
原创 PyQt5学习(二):Buttons and Events(Signals)
在PyQt5学习(一)基础上,封装一个MyWindow类#2.py'''使用类对行为进行封装,具有条理性行为:创建对象时:初始化建立窗口初始化UI界面按钮链接的事件&&执行'''import sysself.label.setText("本车辆目标检测与跟踪系统非常先进")self.b1 = QtWidgets.QPushButton(self) #创建一个buttonself.b1.setText("Click me") #button上的字。
2023-04-13 14:13:48
240
原创 PyQt5学习(一):Setup and basic GUI application
初学PyQt5#1.pyimport syslabel.setText("本车辆目标检测与跟踪系统非常先进")win.show()window()Qt框架的Python语言实现,是最强大的GUI库之一。PyQt提供了一个设计良好的窗口控件集合,每一个PyQt控件都对应一个Qt控件,因此PyQt的API接口与Qt的API接口很接近,但PyQt不再使用QMake系统和Q_OBJECT宏。加油。
2023-04-13 04:00:00
241
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人