タグ付けされた質問 「architecture」

(UNIX)OSアーキテクチャに関する一般的な質問

7
新しいプロセスを作成するために分岐する必要があるのはなぜですか?
Unixでは、新しいプロセスを作成するたびに、現在のプロセスを分岐し、親プロセスとまったく同じ新しい子プロセスを作成します。次に、execシステムコールを実行して、親プロセスのすべてのデータを新しいプロセスのデータに置き換えます。 なぜ最初に親プロセスのコピーを作成し、新しいプロセスを直接作成しないのですか?

2
キーボード入力とテキスト出力はどのように機能しますか?
Aテキストエディタでキーを押すとa、ドキュメントに文字が挿入され、画面に表示されます。エディターアプリケーションがハードウェアと直接通信していないことは知っています(カーネルとその間にあるものがあります)。そのため、コンピューター内で何が起こっているのでしょうか。

6
Linuxの1つの「フレーバー」でコンパイルされたLinux実行可能ファイルは、別の実行可能ファイルで実行されますか?
Linuxの1つのフレーバーでコンパイルされた、以下に示すような非常に単純な小さなプログラムの実行可能ファイルは、異なるフレーバーで実行されますか?または、再コンパイルする必要がありますか? このような場合、マシンのアーキテクチャは重要ですか? int main() { return (99); }


3
rmが別のユーザーの所有権の下でファイルを削除できるのはなぜですか?
投稿からなぜ読み取り専用ファイルをrmで削除できるのですか?rmファイルを削除するには、ディレクトリへの書き込み許可が必要なだけだと理解しています。しかし、所有者とグループが異なるファイルを簡単に削除できる動作を消化するのは難しいと思います。 私は次を試しました mtk:私のユーザー名 abc:新しいユーザーを作成しました $ ls -l file -rw-rw-r-- 1 mtk mtk 0 Aug 31 15:40 file $ sudo chown abc file $ sudo chgrp abc file $ ls -l file -rw-rw-r-- 1 abc abc 0 Aug 31 15:40 file $ rm file $ ls -l file <deleted> 私はこれが許可されるべきではないと考えていました。ユーザーは、所有権のあるファイルのみを削除できますか?誰かがこれが許可されている理由を明らかにできますか?そして、これを避ける方法は何ですか?親ディレクトリの書き込み許可を制限するだけで、ファイルの不意の削除を禁止できます。


1
ソフトウェアおよびハードウェア割り込みとは何ですか、またそれらはどのように処理されますか?
ハードウェアおよびソフトウェア割り込みの概念を理解しているかどうかはわかりません。 私が正しく理解していれば、ハードウェア割り込みの目的は、CPUに注意を向けることであり、CPUマルチタスクの実装の一部です。 次に、ハードウェア割り込みを発行するのは何ですか?ハードウェアドライバープロセスですか? はいの場合、ハードウェアドライバープロセスはどこで実行されていますか?CPU上で実行されている場合、ハードウェア割り込みによってCPUの注意を引く必要はありませんか?他の場所で実行されていますか? ハードウェア割り込みはCPUに直接割り込みますか、それとも最初にカーネルプロセスと通信し、カーネルプロセスがCPUと通信しますか? 一方、ソフトウェア割り込みの目的は、現在CPUで実行されているプロセスがリソースを要求することだと思います。 リソースは何ですか?それらはすべて、実行中のプロセスの形式ですか?たとえば、CPUドライバープロセスとメモリドライバープロセスはCPUとメモリリソースを表しますか?I / OデバイスのドライバープロセスはI / Oリソースを表しますか?プロセスがリソースとも通信したい他の実行中のプロセスはありますか? はいの場合、ソフトウェア割り込みはカーネルプロセスを介して間接的にプロセス(リソースを表す)に接続しますか?ハードウェア割り込みとは異なり、ソフトウェア割り込みはCPUに直接割り込みませんが、代わりにカーネルプロセスに割り込み/接触しますか?

15
* nixのオブジェクト指向シェル
序文:私はbashが大好きで、いかなる種類の議論や聖戦を始めるつもりもありません。これは非常に素朴な質問ではありません。 この質問はスーパーユーザーに関するこの投稿に多少関係していますが、OPが彼が何を求めているのかを本当に知っているとは思いません。FreeBSD、Linux、OS X、およびWindowsのcygwinでbashを使用しています。また、最近、Windows上のPowerShellで広範な経験を積んでいます。 bashと互換性があるが、ミックスにオブジェクト指向のスクリプトのレイヤーを追加する、* nix用のシェルが既に利用可能または作業中です。私が知っている唯一のものは近くにあるPythonコンソールですが、私が知る限り、それは標準シェル環境へのアクセスを提供していません。例えば、私がいないだけでできcd ~とls、その後chmod +x fileのpythonコンソールの内部。これらのタスクを実行するには、標準のUNIXバイナリではなくpythonを使用するか、pythonコードを使用してバイナリを呼び出す必要があります。 そのようなシェルは存在しますか?


2
「すべてがファイルである」という素人の説明— Windowsとは何が違うのか?
「すべてがファイルである」ということは、デバイスでさえUnixやUnixライクなシステムでファイル名とパスを持っていることを意味し、その性質に関係なくさまざまなリソースで共通ツールを使用できることを知っています。しかし、私がこれまでに取り組んだ唯一のOSであるWindowsとは対照的ではありません。私はこのコンセプトについていくつかの記事を読んだことがありますが、それらは開発者以外の人にとっては理解しにくいと思います。素人の説明は、人々が必要とするものです! たとえば、カードリーダーに接続されているCFカードにファイルをコピーする場合、次のようなものを使用します。 zcat name_of_file > /dev/sdb Windowsでは、カードリーダーはドライバーとして表示され、同様のことを行うと思います。それでは、「すべてがファイルである」という哲学は、ここでどのように違いをもたらすのでしょうか?

2
Linuxターミナルはどのように機能しますか?
ターミナルを立ち上げて実行可能ファイルを呼び出すと(単純化のために行指向であると想定)、実行可能ファイルからコマンドへの応答が返されます。これはどのようにあなた(ユーザー)に印刷されますか?端末は次のようなことをしpexpectますか?(出力待ちのポーリング)または何ですか?どのように出力が印刷されるか通知されますか?そして、端末はどのようにプログラムを開始しますか?(それはpythonのos.fork()に似ていますか?)ターミナルがどのように機能するのか戸惑っています。ターミナルエミュレーターで遊んでいますが、この魔法がどのように機能するかまだわかりません。konsole(kde)とyaakuake(おそらくkonsoleを使用)のソースを調べていますが、そのすべての魔法がどこで発生するかわかりません。

3
信号は内部的にどのように機能しますか?
一般に、プロセスを強制終了するにはSIGKILL、SIGTSTPなどのシグナルを生成します。 しかし、特定のシグナルを注文した人、特定のプロセスに送信した人、一般的にシグナルがどのように操作を実行するのかはどのように知られていますか?信号は内部的にどのように機能しますか?

2
シグナルがキャッチされたときのシステムコールの中断
read()とのwrite()呼び出しのマニュアルページを読むと、これらの呼び出しは、ブロックする必要があるかどうかに関係なく、シグナルによって中断されるようです。 特に、仮定 プロセスが何らかのシグナルのハンドラーを確立します。 デバイスが設定されてO_NONBLOCK いない状態で開かれている(つまり、ブロッキングモードで動作している) その後、プロセスread()はデバイスから読み取るシステムコールを行い、その結果、カーネル空間でカーネル制御パスを実行します。 read()プロセスがカーネル空間で実行している間、ハンドラーが以前にインストールされたシグナルがそのプロセスに配信され、そのシグナルハンドラーが呼び出されます。 SUSv3の「System Interfaces volume(XSH)」のマニュアルページと適切なセクションを読むと、次のことがわかります。 私。a read()がデータを読み込む前に信号によって中断された場合(つまり、データが利用できなかったためブロックしなければならなかった場合)、errno[EINTR]に設定された-1を返します。 ii。a read()がデータを正常に読み取った後(つまり、要求の処理をすぐに開始できた)にシグナルによって中断された場合、読み取られたバイト数を返します。 質問A): どちらの場合(ブロック/ブロックなし)でも、信号の配信と処理は完全に透過的ではないと仮定するのは正しいread()ですか? ケースi。ブロッキングread()は通常、プロセスをTASK_INTERRUPTIBLE状態にするため、シグナルが配信されるとカーネルがプロセスをTASK_RUNNING状態にするため、理解できるようです。 しかし、read()ブロックする必要がなく(ケースii。)、カーネル空間でリクエストを処理している場合、シグナルの到着とその処理は、ハードウェアの到着と適切な処理と同様に透過的であると考えていました。割り込みになります。特に、シグナルの配信時に、プロセスは一時的にユーザーモードになり、そのシグナルハンドラーを実行して、最終的に戻り、中断されたread()(カーネルスペースで)処理を終了しread()て、完了までの経過後、プロセスはread()(ユーザー空間での)呼び出しの直後のポイントに戻り、結果として利用可能なすべてのバイトが読み込まれます。 しかし、ii。はread()、データがすぐに利用可能であるため、が中断されていることを暗示しているように見えますが、(すべてではなく)一部のデータのみを返します。 これにより、2番目の(そして最後の)質問に導かれます。 質問B): A)での私の仮定が正しい場合、read()要求を満たすために利用可能なデータがあるためブロックする必要はないのに、なぜ中断されるのですか?言い換えると、なぜread()シグナルハンドラーを実行した後に再開されず、最終的にすべての利用可能なデータ(結局利用可能だった)が返されることになりますか?

2
なぜ `/ lib`と` / lib64`があり、 `/ bin`しかありませんか?
私のラップトップで: $ cat /etc/issue Ubuntu 18.04 LTS \n \l ライブラリには2つの別々のフォルダがありますx86とはx86_64: ~$ ls -1 / bin lib lib64 sbin ... バイナリにはディレクトリが1つしか存在しないのはなぜですか? PS私もAndroidに興味がありますが、その答えが同じであることを願っています。

1
特定のARMアーキテクチャ文字列を決定する簡単なコマンドライン方法?
マシンのアーキテクチャに基づいてアクションを決定するスクリプトを記述しようとしています。すでにuname -mアーキテクチャラインを収集するために使用していますが、ARMアーキテクチャがいくつあるか、またarmhf、1つが、、armelまたはであるかどうかもわかりませんarm64。 これは、このスクリプトがスクリプトの一部を実行できるかどうかを判断するために必要なため、アーキテクチャがarmhf、armelまたはであるかどうかを判断する簡単な方法を探していますarm64。どちらかの出力に使用することができます任意のワンライナーまたは単純なコマンドがありarmhf、armelまたはarm64? このスクリプトは、DebianおよびUbuntuシステム用に特別に作成されており、このことを念頭に置いてタグ付けしています(これらのディストリビューションのいずれかを使用していない場合は自動的に終了しますが、コマンドが存在する) 編集:最近、armelが死んでおり、arm64ソフトウェアビルダー(PPAまたは仮想ベース)が最も安定していないことがわかりました。そのため、arm*armhfを検索して想定するワイルドカード検索がありますが、Ubuntu / Debianコマンドかカーネル呼び出しかなど、3つのうちの1つを返す1つのライナーを見つける必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.