読者です 読者をやめる 読者になる 読者になる

備忘録

調べ物の備忘録など何か書き残し。

スケジューリングを無理やり分類(メモ)

OSのスケジューリングメモ

OSのスケジューリングは、少数のCPUで、多くのプロセスをこなすために実施される。

wikiとかみても、スケジューリングを比較できるような要素に切り分けては書かれていないようなので無理やり分けてみる。



プロセスの処理単位を適切に区切り次のプロセスを実行する。

プロセスの処理単位を区切る方法として、以下2種類の方法がある。

  1. プリエンプション
  2. ノンプリエンプション

プリエンプション
プロセスを割り込みによって中断させる。
割り込みの種類は、例えば時間割り込みなどである。

ノンプリエンプション
プロセスへの割り込みを許さない。
プロセスの終了は各々のプロセス自身が管理する。
よって短い間隔での処理完了が求められたりする。...はず。



次のプロセスを実行する方法として、以下の方法がある。

  1. FIFO(到着順)/ラウンドロビン
  2. 最短ジョブ優先(SPT)/最小残余時間優先(SRPT)
  3. 優先度順


FIFO/ラウンドロビン
実行可能キューにプロセスが到着した順番にプロセスをキューイングし、先頭から順に実行する。

FIFOはノンプリエンプション方式。
ラウンドロビンはプリエンプション方式。時分割でプロセスが切り替わる。


最短ジョブ優先(SPT)/最小残余時間優先(SRPT)
キュー内で残り処理時間の推定値が最も短いプロセスをスケジューラが選択する。

SPTはノンプリエンプション方式。短いプロセスが終わるまで長いプロセスは待ち続ける。
SRPTはプリエンプション方式。短いプロセスが来た時、実行中プロセスの残時間と比較する。より短い方を先に実行する。


優先度順
プロセスに優先度をつけ、優先度が高い順にキューイングする。



だいたいこんな感じだと思う。
こういう話をベースに、OSごとの仕様を読まねば。頭入らん。


参考
スケジューリング - Wikipedia
sched_setscheduler - システムコールの説明 - Linux コマンド集 一覧表
Man page of SCHED

AndroidStudioでのgitバージョン管理方法

既に作成済みのandroid studioプロジェクトをgitに登録し、リモートリポジトリを作成、内部で公開する。

▼手順
1.windows上にgitをインストールする
2.android studioのプロジェクト内でgitリポジトリを作る
3.公開フォルダでリモートリポジトリを生成する
4.公開フォルダにandroid studioプロジェクトをpushする

                        • -

1.windows上にgitをインストールする

gitツールをダウンロード、インストールする
Git

  • >Download


2.android studioのプロジェクト内でgitリポジトリを作る

2-1.gitリポジトリを有効化
android studioでプロジェクトを開く
メニューバー>[VCS]>[Enable Version Control Integration]

  • >Select a version control~ > [Git], [OK]

バージョンコントロールが開始され、画面下部TODO, Android Monitor,...の中に
Version Controlが追加される。

2-2.gitリポジトリにファイル一式を登録
VersionControlタブを選択し、登録したいファイルを選んでDefaultにドラッグ&ドロップする。
(とりあえず全部貼り付け。)
f:id:matomoto:20161220223324j:plain

Defaultを右クリックし、Commit Changes...を選択。
ポップアップが出るので、Commit Messageを入力して、Before commit欄のチェックをすべて外して、commit。

さらにgitのユーザ名を聞かれるので、とりあえず適当に無効な名前、Eメールアドレスでも入れてcommit。


2-3.commit内容の確認

Android Studioプロジェクトの実ファイルがあるフォルダをエクスプローラで開く。
右クリックしてコンテキストメニューから[Git Bash Here]を選択。

MINGW64のターミナルが起動するので、以下コマンドを打つ。

$ git log

2-2で入力したCommit Messageを含んだログが出ることを確認する。



3.公開フォルダでリモートリポジトリを生成する

他所の適当なフォルダで右クリックしてコンテキストメニューから[Git Bash Here]を選択し、ターミナルを起動。
(ここではc:\work\に作る。)
以下コマンドを実行する。

$ git --bare init --shared
$ git log

フォルダにgitの各種ファイルが出来上がったことを確認。
また、gitのコミットログがないことを確認しておく。


4.公開フォルダにandroid studioプロジェクトをpushする

2のAndroid Studio プロジェクトフォルダに戻って以下コマンドを実行する。

$ git remote add origin /c/work/
$ git push origin master

3のリモートリポジトリに戻り、以下コマンドを実行する。

$ git log

この時点で、Android Studioプロジェクトのものと同じログが出てくることを確認できる。

                                          • -

3の公開リポジトリsamba上のフォルダや、ssh接続のフォルダに変えれば、
一応アクセス範囲を絞って公開できているはず。


未調査の点
・リモートリポジトリの作成オプションはbareとsharedがあるが、それらの意図。


参考
第24回 バージョン管理 ─GitとGitHub連携:Android Studio最速入門~効率的にコーディングするための使い方|gihyo.jp … 技術評論社

android api level

android APIレベルのサポートレベルが変わる話メモ。

Google Play services and Firebase for Android will support API level 14 at minimum | Android Developers Blog

2017年のどこかで、google play service libraryがサポートするAPIレベルが変わる。APIレベル14以下がサポート対象外になるらしい。

google play serviceを利用したアプリをビルドするとき、最新版を取り込めなくなるってだけの話?既存の機能追加もないアプリは影響なし?)


APIレベル14は、イコールAndroid4、Android4.0.1、Android4.0.2。

<uses-sdk> | Android Developers

AndroidStudio apkファイル名プロパティ探し

AndroidStudioで [Build -> Build APK]を実行した際、apkファイル名がデフォルトのものになってしまう。
これを自由なファイル名に変更する。


appのbuild.gradleに以下のプロパティを追記する。

android{
    applicationVariants.all {variant ->
        variant.outputs.each{ output ->
            def fileName = "output.apk"
            output.outputFile = new File(output.outputFile.parent, fileName)
            println output.outputFile
        }
    }
}

どういう意味か。

たぶん以下の内容だと思う。
Gradle Plugin User Guide - Android Studio Project Site

  • >Manipulating tasks
    • >All three variant classes share the following properties

表中 "outputFile"。

ApplicationVariantに含まれるパラメタのうち、outputFileが出力apkファイルの情報を表すFileクラスと思われる。
Fileクラスは多分これ
Project - Gradle DSL Version 2.2-20140924021627+0000
 >File file(Object path, PathValidation validation)


ちょっと調べたけどよくわからなかった点。
1.上ではApplicationVariantsの中のApplicationVariant1つだけを見ている。ApplicationVariantsは他に何を含むのか。

2.Gradle pluginの記述ではApplicationVariantの中にoutputFileがあるはず。
  だが実際にはApplicationVariant.outputsの下にoutputFileがある。この差異はどこから来るものか。

参考
AndroidStudio で APK のファイル名を変更する Gradle の設定 - Qiita