當前位置:首頁 » 編程語言 » c語言限制cpu編程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言限制cpu編程

發布時間: 2022-11-08 12:27:45

⑴ 用c語言可以實現cpu中央控制器的設計嗎

CPU中央控制器設計:
1、用FPGA實現,語言是VHDL或者Verilog HDL,因為CPU講究的是速度和可靠性,用純粹的數字硬體電路來實現最好不過了。
2、用嵌入式晶元,比如ARM,然後搭載別人的操作系統,留出需要的介面,這樣是用C語言來實現的,但是核心就是操作系統,C來驅動硬體實現控製作用。而最底層的硬體還是用硬體描述語言VHDL或者Verilog HDL來實現的。所以你所指的C語言實現CPU的設計還是基於一定的硬體平台的操作系統,而且已經預留硬體的介面,用C語言編寫的驅動和內核而已。
3、單純的講CPU大部分是用硬體描述語言,就是1中所述的來設計的。而絕非 在已有的硬體平台下寫個驅動和內核,不過現在的好多硬體都可以用C語言來開發,只不過效率沒有硬體描述語言高。你說的實現CPU的設計不是沒有可能,只不過很少人這么做!
純手打,如果滿意望採納!

⑵ 在linux環境下,我們使用C語言編程,如何正確計算CPU使用率(不限/proc/stat)

我的笨方法:
以/proc/stat為例,它裡面的內容如下:(第一行的幾個單詞,是我為了便於說明,另外標注的)
user nice system idle iowait irq softirq
cpu 65376847 362756 2405159 10834971593 3765180 93399 2395097 0
cpu0 7680302 5263 111909 1355640955 47680 0 185343 0
cpu1 6527638 2261 327795 1356540189 249151 1 24242 0
intr 21259182 122 97003 0 0 0 0 0 0 1 44 0 0 4290639 0 0 0 742540 1330673 0 0 0 0 0 111 173 0 0 0 0 161039 191398 10286 2440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 42582486
btime 1376534806
processes 346513
procs_running 1
procs_blocked 0
softirq 21851001 2 9105868 18006 318205 256633 2 1384334 1159984 60546 9547421
---------------------------- 分割線------------------------------
說明:
user:從系統啟動開始累計到當前時刻,用戶態的CPU時間(單位:jiffies) ,不包含 nice值為負進程。1jiffies=0.01秒
nice:從系統啟動開始累計到當前時刻,nice值為負的進程所佔用的CPU時間(單位:jiffies)
system:從系統啟動開始累計到當前時刻,核心時間(單位:jiffies)
idle:從系統啟動開始累計到當前時刻,除硬碟IO等待時間以外其它等待時間(單位:jiffies)
iowait:從系統啟動開始累計到當前時刻,硬碟IO等待時間(單位:jiffies) ,
irq:從系統啟動開始累計到當前時刻,硬中斷時間(單位:jiffies)
softirq:從系統啟動開始累計到當前時刻,軟中斷時間(單位:jiffies)
CPU時間=user+system+nice+idle+iowait+irq+softirq
-------------------------下面這幾項可以不看------------------
intr:第一個為自系統啟動以來,發生的所有的中斷的次數;然後每個數對應一個特定的中斷自系統啟動以來所發生的次數。
ctxt:自系統啟動以來CPU發生的上下文交換的次數。
btime:從系統啟動到現在為止的時間,單位為秒。
processes:自系統啟動以來所創建的任務的個數目。
procs_running:當前運行隊列的任務的數目。
procs_blocked:當前被阻塞的任務的數目。
-----------------------------計算方法-----------------------------
那麼CPU利用率可以使用以下兩個方法。先取兩個采樣點,然後計算其差值:
cpu usage=(idle2-idle1)/(cpu2-cpu1)*100
cpu usage=[(user_2 +sys_2+nice_2) - (user_1 + sys_1+nice_1)]/(total_2 - total_1)*100
=============================================
建議:要用C語言來編程實現的話,提取各項數據會比較復雜,而用shell腳本來提取的話,會簡單的多;所以你可以嘗試用腳本來提取數據並計算出CPU使用率,然後在C程序中用system( )函數來調用這個腳本。

⑶ 無奈,怎能才能降低C語言程序的CPU使用率!!

單線程程序的都是這樣的,只用一個核,所以佔用50%。
可以用多線程技術解決CPU佔用率過高的問題。
以下為本人原創:

#include <stdio.h>
#include <windows.h>
#include <process.h>

int end = 0;
void calc()
{
int i=1;
while(i++);
end = 1;
}//長時間計運算元程序

void MyThread(void*)
{
calc();
_endthread();//結束線程
}//線程主體

int main()
{
int n;
HANDLE hThread = (HANDLE)_beginthread(MyThread, 0, NULL);//創建另一線程
for(n=0;!end;++n)
{
//idle time = 80%, busy time = 20%
if(n==10) n=0;
if(n==0) SuspendThread(hThread);//掛起線程
if(n==8) ResumeThread(hThread);//恢復線程
Sleep(100);
}
printf("OK!\n");
return 0;
}//主線程