「オペレーティングシステムの原則」実験レポート1

1.実験の目的
1)オペレーティングシステム生成の概念とプロセスを
理解する; 2)オペレーティングシステムの2種類のユーザーインターフェイス(操作インターフェイス、システムコール)の概念を理解する

2.実験内容
1)Ubuntuまたは他のLinuxプラットフォーム環境でLinuxカーネルをカットしてコンパイルし、新しいカーネルを有効にします。
2)Ubuntuまたは他のLinuxプラットフォーム上のLinuxカーネルに1〜3個の新しいシステムコールを追加し、新しいカーネルを有効にして、新しく追加されたシステムコールが正しく機能するかどうかをテストするアプリケーションを作成します。
3)Windows環境で、バッチプログラム(占いmaster.bat)を作成します。プログラムの実行後、次のように入力します。生年月日(たとえば、2000-07-31)。システムは、対応する星座と星座を出力します。例:あなたはウサギ、レオです。要件:入力の正当性がチェックされ、qまたはQが入力されて終了するまで、ユーザーの入力を周期的に受け取ることができます。

3.実験プロセス
(1)実験ステップ
1)Linuxカーネルを再コンパイルし
ます1.リソースのダウンロード
Linuxバージョン:Linux 5.5.7
環境:ubuntu-18.04.4(仮想マシン)
2。フォルダーを移動します
1.圧縮パッケージをにドラッグしますubuntuメインディレクトリ2.3.sudoミュージックビデオの
抽出
/home/Linux5.5.7// usr / src /
3。依存関係の更新とインストール

	sudo apt-get update  
	sudo apt-get install libncurses5-dev libssl-dev   
	sudo apt-get install build-essential openssl   
	sudo apt-get install zlibc minizip   
	sudo apt-get install libidn11-dev libidn11  
	sudo apt-get install bison  
	sudo apt-get install flex  	
4. 内核配置
	#make menuconfig

ここに画像の説明を挿入
5.新しいカーネルを

コンパイルします
#make
–j46。新しいカーネルを生成します#makemodules_install #make install
2)Linuxでシステムコールを追加し
ます1.メインディレクトリに入り
ます2.カスタムシステムコール番号を追加するファイルを開き、コールを追加しますおよび目次
sudogedit arch / x86 / entry / syscalls / syscall_64.tbl
ここに画像の説明を挿入
sudo gedit include / linux
ここに画像の説明を挿入
/ syscalls.h sudo gedit kernel / sys.c3
ここに画像の説明を挿入
ここに画像の説明を挿入
。カーネルをコンパイルします4.C
言語関数の検証を記述します

	#include <linux/kernel.h>  
	#include <sys/syscall.h>  
	#include <unistd.h>  
	#include <stdio.h>  
	  
	int main(int argc,int **argc)  
	{
    
      
	    printf("System call sys_first return %ld\n",syscall(335));  
	    long temp;  
	    temp=syscall(336,2);  
	    printf("System call sys_second return %ld\n",temp);  
	    temp=syscall(337,2,3);  
	    printf("System call sys_third return %ld\n",temp);  
	  
	    return 0;  
	      
}  

5.プログラムを実行
sudoのはgcc -oテストtest.cの
須藤./test
6.見ると、コール
はsudoのdmesg
3)バッチプログラム「占い書くmaster.batを
、1.メモ帳を新規ドキュメント作成
2。コードを記述し、ANSIとしてコードを記述し、format.batを保存します

		@echo off  
	 set /p yearmonthday=输入: 出生年月日 (例如 19990411)  
	 set "shengxiao=猴鸡狗猪鼠牛虎兔龙蛇马羊”  
	 set year=%yearmonthday:~0,4%  
	 set monthday=%yearmonthday:~4,4%  
	 set /a mod=%year%%%12  
	    
	if %mod%==0 Echo 你属猴  
	 if %mod%==1 Echo 你属鸡  
	 if %mod%==2 Echo 你属狗  
	 if %mod%==3 Echo 你属猪  
	 if %mod%==4 Echo 你属鼠  
	 if %mod%==5 Echo 你属牛  
	 if %mod%==6 Echo 你属虎  
	 if %mod%==7 Echo 你属兔  
	 if %mod%==8 Echo 你属龙  
	 if %mod%==9 Echo 你属蛇  
	 if %mod%==10 Echo 你属马  
	 if %mod%==11 Echo 你属羊  
	 echo 你的星座是  
    
	if "%monthday%" LEQ "0119" echo 魔蝎座  
	 if "%monthday%" GEQ "0120" if "%monthday%" LEQ "0218" echo 水瓶座  
	 if "%monthday%" GEQ "0219" if "%monthday%" LEQ "0320" echo 双鱼座  
	 if "%monthday%" GEQ "0321" if "%monthday%" LEQ "0419" echo 白羊座  
	 if "%monthday%" GEQ "0420" if "%monthday%" LEQ "0520" echo 金牛座  
	 if "%monthday%" GEQ "0521" if "%monthday%" LEQ "0621" echo 双子座  
	 if "%monthday%" GEQ "0622" if "%monthday%" LEQ "0722" echo 巨蟹座  
	 if "%monthday%" GEQ "0723" if "%monthday%" LEQ "0822" echo 狮子座  
	 if "%monthday%" GEQ "0823" if "%monthday%" LEQ "0922" echo 处女座  
	 if "%monthday%" GEQ "0923" if "%monthday%" LEQ "1023" echo 天秤座  
	 if "%monthday%" GEQ "1024" if "%monthday%" LEQ "1122" echo 天蝎座  
	 if "%monthday%" GEQ "0321" if "%monthday%" LEQ "0419" echo 白羊座  
	 if "%monthday%" GEQ "1222" echo 魔蝎座  
 Pause  

@echo offは、このステートメントの次のコマンドステートメントが出力画面に表示されないためです。set
/ p Birthday =-> / pは読み取りと割り当て時に追加され、入力文字列はbirthday
set year =に割り当てられます。%birthday:〜0,4%->誕生日の0桁目から開始すると、4文字がインターセプトされ、年
セットに割り当てられます/ a yy =%year %%% 12
計算割り当てを実行する場合は、/ a%year%を追加します年を表す値%%は、残りの操作を示します
%day%leq 19 leqは、
3以下を意味します。実行実行
するbatファイルをダブルクリックします。
(2)エラーを解決して最適化する
1.ネットワーク接続の問題、環境構成エラー。仮想マシンのubuntuはインターネットにアクセスできず、更新できないようです。解決策は、仮想マシンのネットワーク接続モードを直接接続からブリッジ接続に変更することです。
2.一部の依存関係をインストールできず、環境構成が間違っています。解決策は、re-#apt-get updateを実行してから、再インストールして、繰り返すことです。
3. #make menuconfigはエラーを報告し、コンパイルエラーを報告します。
ここに画像の説明を挿入

解決策は、ターミナルウィンドウを最大化することです。
4.特別な文法エラー。たとえば、コマンドラインに入るとき、「。」とスペースを忘れることがよくあります。解決策は、Linuxコマンドに精通し、コードを書くときにもっと注意することです。

4.実験結果
1)Linuxカーネルを再コンパイルします
ここに画像の説明を挿入
ここに画像の説明を挿入

図に示すように、最初にubuntuの詳細オプションを選択し、次にLinux5.5.7を選択して新しいカーネルを有効にします。
2)Linuxでシステムコールを追加する
ここに画像の説明を挿入

setシステムコールを呼び出すことができることがわかります。
3)バッチプログラム「FortuneTellerMaster.bat」を作成する
ここに画像の説明を挿入

年、月、日を入力すると、正しい結果が得られます。

5.経験
1.オペレーティングシステムの生成についてより深く理解している2.Linux
の使用経験がある
3.問題に対処する能力が向上している

おすすめ

転載: blog.csdn.net/weixin_45341339/article/details/112412025