操作系统课程设计创建新进程造成消耗系统资源死机问题的原因

首先要明确一个概念:

1、初始化:C++中变量的初始化是如下形式:
int a = 0;

也就是说在创建变量的时候,在内存中为这个变量开辟一段内存,同时把这个数值填进去。如果只是定义变量

int a;

那么此时虽然 创建了a变量,为a变量开辟了一个内存空间,但是此时这段内存空间里面的值没有被指定,是随机的,也就是垃圾值

2、赋值

赋值是在定义了变量之后,利用其他内存块中的数值来覆盖当前变量的所在的内存。

初始化只能进行一次,即在变量定义的时候,但是赋值却可以进行多次。



在实验2-1的时候,可能大家没有发现,所谓的创建进程就是以你自己写出代码的那个进程为父进程,进而运行这个程序创建一些子进程,并且程序做了明确的限制,只创建5个进程就停止这个程序。


int main(int argc, char *argv[])
{
	int nClone;
	//nClone = 0;     NO1

	if(argc > 1)
	{
		::sscanf(argv[1], "%d", &nClone);
	}
	nClone = 0;     NO2
	cout << "Process ID:" << ::GetCurrentProcessId()
		<<",Clone ID:" << nClone
		<<endl;

	const int c_nCloneMax = 5;
	if(nClone < c_nCloneMax)
	{
		StartClone(++nClone);
	}

	getchar();
	return 0;
}

这是我们这次实验的主函数,当我们运行这个程序的时候,第一次执行的就是父进程,因为我们在运行程序的时候没有为main函数提供多余的参数,所以此时argc参数个数是等于1,所以此时不执行if那个语句。改了 第二次的样子应该像上面一样,先是定义这个NCLONE变量,此时这个变量里面就是垃圾值,因为没有初始化,该变量所在的内存里面的值不确定,是随机的,因为跳过了IF语句执行了nCloneDE  = 0,这个赋值语句,所以当前执行的这个父进程没有问题。但是在父进程创建第一个子进程的时候,nClone因为是做进程个数的计数器,此时已经变为1,创建子进程的时候,再调用Main函数就会执行主函数里面的if语句,因为要把当前创建子进程的个数传递进去,因为只有这样,随着创建进程个数的增加,整个程序才会停止,但是因为第二次修改在if语句后面把本来已经获取到值得nClone给覆盖了,再次改成0,所以此时程序就默认以前是只创建了一个进程,一次类推,程序不断的默认只创建一个进程,永远不会被限制条件所限制停止程序,最终耗光所有的系统资源,造成死机 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在RT-Thread的可穿戴操作系统中,使用JavaScript进行开发可能出现一些原因导致死机问题。以下是一些可能导致死机的常见原因: 1. 代码错误:JavaScript代码中可能存在语法错误、逻辑错误或者内存管理错误,例如变量未定义、循环逻辑错误等,这些错误可能导致系统崩溃或死机。 2. 资源管理问题:使用JavaScript可能涉及到对系统资源的访问和管理,如定器、内存分配等。如果资源管理不当,可能导致资源竞争、内存泄漏等问题,最终导致死机。 3. 阻塞操作:在JavaScript中执行阻塞操作(如长间运行的循环、延操作等)可能阻塞系统的其他任务或中断处理,导致系统无响应或死机。 4. 引用外部模块问题:使用JavaScript可能引用外部的模块或库。如果这些模块存在兼容性问题、内存泄漏或者其他错误,可能影响系统的稳定性,导致死机。 5. 资源限制:可穿戴设备通常具有有限的资源(如内存、处理能力等)。如果JavaScript代码过于复杂或耗费过多的资源,可能超出设备的限制,导致死机。 解决由JavaScript开发引起的死机问题的方式可能包括以下几个方面: 1. 仔细检查代码:逐行检查JavaScript代码,查找潜在的问题点,如语法错误、逻辑错误、资源管理错误等。 2. 调试工具:使用调试工具(如浏览器的开发者工具、调试器等)进行调试和性能分析,定位问题所在,并进行逐步调试和排查。 3. 优化代码:对存在问题的JavaScript代码进行优化,如修复语法错误、改进资源管理、优化性能等,提高系统的稳定性。 4. 合理使用阻塞操作:避免在JavaScript中使用长间运行的循环或延操作等阻塞操作,确保系统的响应性。 5. 选择合适的外部模块:在引用外部模块或库,确保其稳定性和兼容性,并及修复已知的问题和漏洞。 需要根据具体情况进行分析和解决,以确保可穿戴操作系统的稳定性和可靠性。同,也可以参考RT-Thread社区的文档和论坛,获取更多关于JavaScript开发的指导和建议。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值