쉘이없는 운영 체제는 무엇입니까?


41

bash 또는 command.com (최대 Windows ME) 또는 CMD.EXE (이후 버전)와 같은 쉘은 사용자의 명령을 받아들이는 인터페이스를 제공합니다. 쉘이 실행되기 전에 운영 체제는 어떤 모습입니까? 첫 번째 쉘이 개발되기 전에 시스템이 어떻게 사용 되었습니까 (예 : 1970 년대 초의 UNIX)? 컴퓨터가 명령을 받아 들일 수없는 경우 (명령 줄이없는 경우) 사용자는 어떻게 명령과 상호 작용할 수 있습니까? 가장 기본적인 인터페이스는 무엇입니까? 이 인터페이스를 터미널 에뮬레이터에서 실행할 수 있습니까? 아니면 쉘 뒤에서 갈 수 있습니까?



2
@Ramhound 물론 명령 줄없이 시스템과 상호 작용할 수 있습니다. 일주일 내내 다양한 ​​UI 디자인 접근 방식의 장점을 주장 할 수 있지만, 기본적으로 명령 줄이 없어도 클래식 Mac OS 및 Altair와 상호 작용할 수있었습니다.
CVn

4
가장 기본적인 인터페이스는 아마도 PDP11 / 04와 같은 스위치 패널 일 것입니다
Tog

1
체스와 같은이 한 외모 raspberrypi.org/archives/4300
니코 화상

1
아무도 보지 못하고 숲에 떨어지는 나무처럼 보입니다.
Nathan Hayfield

답변:


35

쉘이 실행되기 전에 운영 체제는 어떤 모습입니까?

OS 및 구성 방법에 따라 다릅니다. Linux는 텍스트 모드 콘솔, 프레임 버퍼 콘솔 또는 직렬 포트에 관계없이 콘솔 장치에 부팅 텍스트를 쓰도록 구성 할 수 있습니다. 완벽하게 자동으로 구성 할 수도 있습니다. 일부 OS / 시스템은 시스템을 개발자, 디버그 또는 진단 모드로 설정하여 액세스 할 수있는 비 휘발성 메모리에 진단 정보를 쓸 수 있습니다. 많은 운영 체제는 부팅 및 진단 정보를 특정 형태의 UART로 출력하는 것을 지원하며, 사용자에게 숨겨져 있어도 장치에서 사용 가능할 수 있습니다 (Google "직렬 포트를 DD-WRT에 추가"하여 제조업체가 직렬 포트를 숨기는 위치 및 방법 당신은 그들에게 갈 수 있습니다).

OS에는 외부 디스플레이가 전혀 필요하지 않습니다. OS에 대한 다른 장치 일뿐입니다.

첫 번째 쉘이 개발되기 전에 시스템이 어떻게 사용 되었습니까 (예 : 1970 년대 초의 UNIX)?

본질적으로 (많은 것을 남기지 만 아이디어는 얻을 수 있습니다)-패널의 스위치를 뒤집거나 종이 테이프 판독기를 사용하여 프로그램을로드 한 다음 (이 장치는 CPU 개입없이 직접 메모리에 쓸 것입니다) 시작하십시오 다른 스위치가있는 CPU. CPU는이 프로그램을 실행하고 출력을 생성 한 후 중지합니다. 이것은 대화식 처리가 아닌 일괄 처리입니다. 다른 프로그램을 실행하려면이 작업을 수행해야합니다.

컴퓨터가 명령을 받아 들일 수없는 경우 (명령 줄이없는 경우) 사용자는 어떻게 명령과 상호 작용할 수 있습니까?

저는이 분야의 전문가는 아니지만 Altair, IMSAI 및 PDP-8과 같은 오래되고 오래된 컴퓨터는 CPU를 직접 제어하고 CPU 개입없이 메모리를 직접 읽고 쓸 수있는 전면 패널 스위치를 가지고있었습니다.

가장 기본적인 인터페이스는 무엇입니까?

모든 최신 CPU에 동일한 유형의 직접 작업을 허용하는 "JTAG 포트"가있는 것은 아닙니다. 오랫동안 대부분의 컴퓨터에는 시스템이 OS에 전달되기 전에 시스템을 켤 때 시스템을 제어하는 ​​ROM 또는 펌웨어가있을 것으로 예상되었습니다. 여기에는 사전 부팅 유틸리티가 있거나 이러한 유틸리티를로드하는 최소한의 메커니즘이 있습니다. U-Boot와 같은 일부 부트 로더는 직렬 포트를 통해 액세스 할 수 있습니다. 부트 로더는 OS 뒤에서 실행되지 않고 OS를로드하고 수동으로 제어하며 더 이상 실행되지 않습니다.

이 인터페이스를 터미널 에뮬레이터에서 실행할 수 있습니까? 아니면 쉘 뒤에서 갈 수 있습니까?

아니요, JTAG 인터페이스가 필요합니다. 그것은 전자 분야로 뛰어 들고 있으며 GuruPlug 에 하나가 포함되어 있으며 GuruPlug의 보드에 플래시 칩을 직접 프로그래밍 할 수 있다는 점을 제외하고는 그것에 대해 많이 알지 못합니다 . GuruPlug, 나는 "CPU 독립"방법으로 그것을 다시 플래시합니다.


4
JTAG 인터페이스는 (전용 컨트롤러의 도움으로) 정상 작동 모드를 우회하는 모든 구성 요소의 테스트 인터페이스에 대한 액세스를 허용합니다. 노출 된 테스트 기능에 따라 메모리를 프로그래밍하고 입력 / 출력을 제어하며 CPU를 시작 / 중지하거나 내부 레지스터를 읽을 수 있습니다.
Chaos_99

23

오늘날 일반적으로 사용되는 용어 (사용자가 대화 형으로 명령을 받아들이는 응용 프로그램을 의미 함)로 운영 체제에서 셸을 제공 할 필요는 없지만 이러한 운영 체제는 실제로는 "모양처럼"보이지 않습니다. 사용자. 올리버 잘츠부르크 (Oliver Salzburg)가 언급했듯이, 아마도 빈 화면이 표시 될 것입니다 (디스플레이 출력 지원이있는 경우). 부팅 및 커널 초기화 프로세스 중 Linux 커널의 진단 출력을 예로 들어 보겠습니다.

그래픽 쉘, 명령 행 인터프리터 또는 기타 다른 유형의 쉘은 운영 체제에서 제공하는 기능을 사용하여 명령 읽기, 프로세스 실행, I / O 리디렉션 등의 작업을 수행합니다.

그러나 이러한 기능을 사용하는 응용 프로그램이없는 이유가 없다 쉘은 .

예전에는 운영 체제는 단순히 각 응용 프로그램이 처음부터 다시 작성해야하는 "유용한 루틴"모음 일뿐이었습니다. 컴퓨터는 기본적으로 일괄 처리 장치였습니다. 파일, 디스크 및 프린터 I / O와 같은 것들은 아마도 현재 운영 체제로 알려진 것 중 가장 먼저 수집 된 후 프로세스 스케줄링 (1960 년대 초 Apollo Guidance Computer는 멀티 태스킹 컴퓨터라는 점에 주목할 가치가 있습니다)). 그런 다음 응용 프로그램은 자체 루틴을 사용하는 대신 OS를 호출하여 프로그래밍 복잡성을 줄이고 코드 크기 또는 실행 시간을 줄일 수 있습니다 (시스템 기능을 한 번에 최적화하고 디버깅 한 후 모든 사람이 혜택을 얻을 수 있기 때문에) . 컴퓨터가 점점 일반화되면서 운영 체제는 사용자가 컴퓨터와 상호 작용하고 대화 형 방식으로 명령을 제공하는 방법과 같이 사용자 중심의 기능을 추가했습니다. 그래픽 쉘은 단순히 그 추론의 확장입니다.

또한 그리 오래 전 (1980 년대 후반까지는 생각하지 않았 음), 일반 운영 체제의 도움없이 베어 개인용 컴퓨터 하드웨어에서 실행할 응용 프로그램을 작성하는 것이 여전히 일반적이었습니다. 이것은 운영 체제의 메모리와 처리 오버 헤드를 피할 수 있기 때문에 게임에 특히 유용했지만 다른 예제도있을 것이라고 확신합니다. 이 경우 어느 정도까지는 응용 프로그램이 자체 운영 체제 였으며 결과적으로 해당 응용 프로그램에서 제공하는 사용자 인터페이스는 셸이었습니다.


4
오늘날 운영 체제없이 베어 메탈에서 실행되는 프로그램을 작성하는 것이 매우 일반적입니다. 요즘에는 전자 장치가 들어있는 거의 모든 것이 마이크로 컨트롤러가 있습니다. 자동차 나 라우터와 같은 이러한 임베디드 시스템 중 일부에는 운영 체제가 있지만 온도 조절기, 세탁기 등과 같은 단순한 것은 일반적으로 그렇지 않습니다.
Jeanne Pindar

1
@JeannePindar 좋은 지적; 개인용 컴퓨터와 관련하여 의미가 있음을 분명히했습니다.
CVn

11

초기 컴퓨터에는 오늘날 우리가 사용하는 의미에서 OS가 없었습니다. 그들은 하드웨어에서 구현 된 기능을 실행중인 모든 프로그램에 직접 노출했습니다. 한 번에 하나의 프로그램 만 실행되었습니다. 프로그램 자체는 모든 작업을 제어해야했지만 OS가 '백그라운드에서'수행 한 것은 없습니다.

그러나 여전히 사용자가 프로그램을 시작할 수있는 진입 점이있었습니다. 단어를 늘리면 이것을 "쉘"이라고 부를 수 있습니다. 그러나 기본적으로 사용자가 프로그램의 첫 번째 비트를 입력하기를 기다리는 것은 하드웨어 일뿐입니다. 누르는 버튼, 튕겨 진 스위치, 스위치 보드의 연결된 전선, 펀치 카드, 펀치 필름 또는 자기 테이프 형태로되어 있어야합니다. 아마도 이전에로드 된 여러 프로그램 옵션 중에서 선택할 수도 있습니다. 그러나 옆에있는 버튼을 눌러 빛나는 조명으로 표시된 목록에서 선택하더라도 이미 '쉘'로 간주 될 수 있습니다.

따라서 'shell'에 대한 정의가 '사용자의 명령을 받아들이는 인터페이스'인 경우 적어도 컴퓨터를 애매하게 호출하는 장치에는 시간이 없었습니다.

입력 / 출력 관점에 중점을 두지는 않지만 컴퓨팅 역사에 관한 꽤 좋은 Wikipedia 페이지 를 확인하고 싶을 수도 있습니다 .


6

아마도 빈 화면 일 것입니다.

쉘은 아마도 이름이 은 커널 주위에 쉘 (커널은 운영 체제 인)이기 때문이다. 따라서 어떤면에서든 운영 체제에 대한 사용자 인터페이스입니다.

운영 체제는 컴퓨터를 종료하는 것 하나 개의 기능을 가지고 있었고, 그 기능을 모든 키보드 입력을 허용 한 후 호출하는 프로그램을 빌드 할 경우, 쉘입니다. 사용자와 인터페이스하는 무언가를 만들기 위해 복잡한 명령 행 인터페이스가 필요하지 않습니다.


2

역사적 관점에서 펀치 카드 ( https://en.wikipedia.org/wiki/Punched_card ) 가 있다고 생각합니다 . 컴퓨터 시스템과 상호 작용합니다. 그러나 나는 이것이 당신의 질문을 위해 멀리 돌아온 것 같아요.


펀치 카드는 운영 체제에서 볼 수있는 부분이 아니라 데이터 저장 메커니즘이었습니다.
CVn

2

대학 졸업 후 내가 사용한 최초의 OS (1981)는 Prime 미니 컴퓨터의 PRIMOS였습니다. 이것은 시간 공유 운영 체제였으며 RS232 케이블을 통해 컴퓨터에 연결된 터미널을 사용하는 많은 사용자를 지원했습니다. 사용자 이름과 비밀번호를 입력하여 터미널에 로그온해야했습니다. 터미널 세션은 일종의 껍질이었습니다. 파일을 편집하고 컴파일하고 오늘날 우리가하는 모든 일을 실행할 수 있습니다. 모든 터미널은 동일한 파일 시스템에 액세스 할 수있었습니다. 대부분이 터미널은 타자기 그 이상이었습니다. WYSISWYG 편집자도없고, emacs도 꿈이었습니다.

운영 체제는 현재와 같은 구조로 구성되어 있으며 어니언 스킨 레이어로 상상할 수 있습니다. 가장 안쪽 계층은 하드웨어 제어, 메모리 액세스와 같은 매우 낮은 수준의 기능을 가졌습니다. 바깥쪽으로 가면 파일 시스템이 추가 된 다음 사용자 계층이 추가됩니다. 프로그램에서 일부 레이어와 상호 작용할 수 있지만 가장 안쪽 레이어와 상호 작용할 수 없습니다 (따라서 시간 공유 또는 실제 하드웨어-표시 등)를 망칠 수는 없습니다. 쉘이없는 컴퓨터는 이러한 내부 계층 중 하나와 같으며 하드 디스크와 테이프 리더 (실제!)에 액세스 할 수 있지만 파일이나 사용자에 대해서는 알 수 없습니다.

초기 컴퓨터를 부팅하려면 기본 지침 세트를로드해야했습니다 (컴퓨터에서 일련의 물리적 스위치를 일련의 순서로 전환해야 함). 이 순서는 두 번째 작은 프로그램을 시작하여 테이프 판독기가 작동 할 수있게합니다. 그런 다음 테이프 리더를 통해보다 복잡한 시스템을로드하면 디스크 드라이브가 온라인 상태가 될 수 있습니다. 쉘리스 OS가 이러한 초기 로더 중 하나 인 것처럼 상상할 수 있습니다.

오늘날 컴퓨터에는 비슷한 순서가 있으므로 컴퓨터를 시작할 때 디스크, 네트워크 카드, 비디오 카드 등을 시작하는 BIOS를로드 한 다음 BIOS는 하드 디스크에서 특정 프로그램을 찾아서 실행합니다 (Windows에서) 적어도). 유닉스는 매우 기본적인 모듈로 시작하여 로그인 프롬프트가 나올 때까지 커널을 점진적으로 설정하는 비슷한 작업을 수행합니다.


1

정의로서 운영 체제는 다소 모호합니다. 커널 자체입니까? 커널입니까, 도구와 함께 제공됩니까? Linux는 커널이지만 GNU / Linux는 Linux 커널 및 GNU 프로젝트 도구를 기반으로하는 운영 체제입니다. 쉘은 그러한 운영 체제의 필수 부분입니다.

그러나 일단 Linux가 시작되고 "부팅"이 끝나면 어떤 프로그램을 실행할 것인지 알려 주어야합니다. 그때부터 모든 것이 그 특정 프로그램에 달려 있습니다. 기본적으로 init다음에 수행 할 작업을 알고 결국 GUI 로그인 화면이 표시 될 수 있습니다. 그러나 그런 식일 필요는 없습니다. 이렇게 부팅 할 수 있습니다

kernel /boot/vmlinuz-2.6.30 root=/dev/sda1 ro init=/bin/fancy

그러면 프로그램 /bin/fancy은 "Hello world!"를 인쇄합니다. 우리는 그것을 위해 쉘이 필요하지 않습니다. 다른 프로그램을 시작하려면 man 2 forkand 로 새로운 프로세스를 생성 man 2 execve하거나 터미널 장치에서 읽고 사용자의 입력을 수락하십시오. 여전히 쉘이 필요하지 않습니다.

내보기에서 운영 체제 셸은 사용자의 입력을 읽은 다음 다른 프로그램을 시작할 수있는 프로그램입니다. 당신이 그것을 생각한다면, 왜 그러한 프로그램을 작성하고 싶은지는 분명합니다.

대화식으로 사용자 입력을 읽을 필요가 없더라도 작업을 위해 간단한 쉘 스크립트를 작성하는 것이 훨씬 편리합니다. 이 경우 저장된 쉘 명령을 해석하는 것입니다. 다른 언어의 통역사로 프로그램을 작성할 수도 있습니다.


1

명령 행 쉘이나 그래픽 인터페이스가없는 운영 체제에는 다른 많은 종류의 "면"이 있습니다.

임베디드 시스템은 자동차의 엔진 관리 시스템 (OBD2 인터페이스 및 적절한 터미널을 통해 어떤 방식 으로든 얻을 수 있음)과 같은 사용자 인터페이스 없이도 작업을 수행합니다. 또는 디지털 키패드, 손잡이 등이있을 수 있습니다 (전자 레인지, 엘리베이터 또는 현대 사운드 시스템의 페이스 플레이트). 이것들을 쉘 형태로 간주하든, 주관적입니다.

다음은 애호가로서 쉘없이 유용한 컴퓨터를 만드는 방법에 대한 고급 레시피입니다.

  • 마이크로 컨트롤러 용 회로 보드를 구축하거나 일반 보드를 구하십시오.
  • 수분 센서 및 워터 밸브와 같은 유용한 장치를 구동하기 위해 연결하십시오. 마이크로 컨트롤러에는 이러한 용도의 UART, GPIO 등의 주변 장치 핀이 있습니다.
  • 센서를 모니터링하기 위해 펌웨어를 작성하고 토양에 물을주십시오.
  • 개발 도구를 통해 펌웨어를 업로드하십시오 (따라서 호스트 컴퓨터에서로드 및 실행을위한 쉘이 필요하지 않으며 펌웨어는 칩의 플래시 메모리에 저장 됨). 프로그래밍에는 마이크로 컨트롤러가 특수 프로그래밍 보드에 연결되어 있거나 실제 보드에있는 동안 수행하는 방법이있을 수 있습니다. 보드는 PC와 인터페이스하고 (예 : USB를 통해), IDE와 같은 일부 도구 또는 호스트의 명령 줄 도구를 사용합니다.
  • 물건을 배치하십시오 : 이제는 본질적으로 다른 입력이나 출력없이 토양 수분을 모니터링하고 물을 켜는 전자 블랙 박스입니다.

쉘이없는 초창기 범용 컴퓨터에는 펀치 카드 읽기와 같은 몇 가지 입력 수단이있었습니다. 물론, 천공 카드는 구별되어야했습니다. 천공 카드는 컴퓨터에 특별한 명령을 주나요? 아니면 포트란 프로그램의 일부입니까? 따라서 "작업 제어 언어"가 개발되어야했는데 이는 사실상 명령 행입니다.

펀치 카드 및 작업 제어 언어 이전에 프로그래머는 이진 코드를 기계에 공급하기 위해 스위치를 전환해야했습니다. 부트 스트랩을 시작하기 위해 명령 시퀀스를 "토글"해야했던 옛 타이머의 이야기를 들었을 것입니다. 점퍼 나 DIP 스위치가있는 장치가 여전히 존재하며 펌웨어 설정과 비교하여 몇 가지 장점이 있습니다.


0

내가 갇힌 첫 번째 컴퓨터는 1977 년 지멘스 305 였고, FORTRAN IV를 배우고있었습니다. 종이, 펀치 카드 리더, 펀치 테이프 리더 / 라이터 및 프린터에 명령을 실행하고 진단 메시지를 인쇄하는 타자기가있었습니다. 16 인치 정도의 40MB 이동식 하드 디스크를 잊지 마십시오. 그래서 이미 쉘이 있었고 인터페이스는 타자기였습니다.


0

1970 년대에 명령 쉘과 동등한 디버거 및 텍스트 편집기 (DDT 및 emacs)를 실행 한 것을 기억합니다. 따라서 eshell을 통해 실행되는 다른 프로그램을 사용하여 프로그램을 실행하는 디버거로 콘솔 모드에서 emacs를 실행하면 가까운 경험을 할 수 있습니다.

emacs는 완전한 lisp 환경을 가지고 있으므로 훌륭한 명령 히스토리 편집 및 여러 가상 터미널 외에도 매우 유능한 매크로 및 스크립팅 기능이 내장되어 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.