マエカワの備忘録的な何か

思い立ったが吉日

オペレーティングシステム 其の一 20170412

電卓程度のアセンブリ言語(わかりにくい)

↓ ここのギャップをOSが埋めている

普段使っているPCのスペック(簡単)

 

OS:ハードウェアを抽象化してソフトウェア開発をしやすい形にする

 

OSを学ぶとは

 ①コンピュータの低レイヤを学ぶ

 ②OSが提供する環境を学ぶ

このふたつの意味合いを持つ

 

OSを学んでここがうれしい!!

 ・低レイヤのことがわかる

  ⇒デバイスドライバ:ハードウェアと新しい機器とをつなぐ役割…OSの知識が不可欠

  ⇒組み込み:単純な危機に搭載するCPUの設計のためには低レイヤの設計、ハードウェア寄りの設計が必要

 

 ・セキュリティ

  ⇒攻撃も防御もOSの知識が必要

  ⇒マルウェアルートキット(トロイの木馬、ステルスハック)

  ⇒フォレンジック(コンピュータから情報を集める技術)

 

 ・プログラムの高速化

  ⇒アルゴリズムでどうにかなるならばいいが、OSに関する箇所がボトルネックになっていることが多々ある

 

OSが隠しているもの、やっていること

 ・実行ファイルが実行できるように準備をする

 ・ハードウェアが文字を表示するまでにいくつもの層やインターフェースを通らなければならない

 

例えば…

#include<stdio.h>

int main(void){

 printf("Hello,world");

 return 0;

}

上のような単純なプログラムを実行するためにもかなりの手順を踏んでいて、そこにOSが密接に絡んでくる。

 

補足:LinuxはユーザーにOSの状態を開示しているのでおすすめとのこと

プログラミング言語実験 其の一 20170411

・list構造の復習(C言語)

 <基本設定>

  …Node型の設定

  typedef struct _Node{

   double data; //Nodeに入れるデータ

   struct _Node *next; //自己参照構造体

  }Node;

 

  …先頭のNodeの設定

  Node *p,*start;

  p=malloc(sizeof(Node)); //大きさNodeのメモリを動的に確保

  start=p; //最初に設定した位置を*startに記録

 

  ...Nodeの連鎖の設定

  for(i=0;i<n;i++){

   p->next=malloc(sizeof(Node)); //メモリを動的確保

   p=p->next; //pの位置をポインタで指し示す次のNodeに移す

  }

 

この後は、pをstartの位置まで戻して同じようにしてデータの格納を行っていく。

データを出力するときもpをstartの位置まで戻して順番に出力していくとよいだろう。

あと、malloc関数を用いるときには

#include<stdlib.h>

を冒頭に書き示さなければならないことに注意。

 

参照:自己参照構造体