
일부 레거시 컴퓨터/컨트롤러에는 파일 시스템이 없습니다. 이러한 장치에 운영 체제가 없기 때문입니까? 파일을 이러한 장치에 저장할 수 없는 경우 공장 제어 로직/프로그램 및 기타 데이터를 어떻게 장치에 저장할 수 있습니까?
답변1
파일 시스템은 기본적으로 파일을 메모리에 저장하는 방법입니다.
하드 디스크, 플래시 드라이브, 광 디스크, 메모리 카드 등과 같은 메모리 장치는 고정된 바이트 수를 저장할 수 있습니다. 비어 있고 지워진 48바이트 메모리에는 다음이 포함됩니다.
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
이제 텍스트 파일이 두 개 있다고 가정해 보겠습니다.
- 첫 번째는 호출됩니다.인사말.txt이라는 단어가 포함되어 있습니다
Hello
. - 다른 하나는사용자 이름.txt이라는 단어가 포함되어 있습니다
gronostaj
.
파일은 다음을 사용하여 인코딩됩니다.아스키이므로 각 문자는 1바이트에 해당합니다. ASCII를 사용하여 인코딩한 후 파일의 바이트는 다음과 같습니다.
이름
47 72 65 65 74 69 6e 67 73 2e 74 78 74
내용물
48 65 6c 6c 6f
이름
55 73 65 72 6e 61 6d 65 2e 74 78 74
내용물
67 72 6f 6e 6f 73 74 61 6a
(저는 해당 웹사이트 표의 두 번째 열에 있는 16진수 값을 사용하고 있습니다.)
다음과 같이 첫 번째 파일의 내용을 메모리에 넣을 수 있습니다.
48 65 6c 6c 6f 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
하지만 몇 가지 문제가 있습니다.
- 메모리에 두 번째 파일을 저장하려면 어떻게 해야 합니까? 한 파일이 어디에서 끝나고 다른 파일이 시작되는지 어떻게 알 수 있나요?
- 파일에는 이름이 있습니다. 이를 어떻게 저장합니까?
이러한 문제를 해결하기 위해 간단한 파일 시스템을 만들 수 있습니다. 파일 이름과 내용을 인터리브하여 모든 파일 이름 뒤에 해당 파일의 내용이 오고 이를 0바이트로 구분한다고 가정해 보겠습니다. 두 개의 연속된 0바이트는 "더 이상 파일이 없음"을 의미합니다.
47 72 65 65 74 69 6e 67 <- first 8 bytes of name 1
73 2e 74 78 74 00 48 65 <- next 5 bytes of name 1, then 00, then 2 bytes of content 1
6c 6c 6f 00 55 73 65 72 <- next 3 bytes of content 1, then 00, then 4 bytes of name 2
6e 61 6d 65 2e 74 78 74 <- next 8 bytes of name 2
00 67 72 6f 6e 6f 73 74 <- 00, then 7 bytes of content 2
61 6a 00 00 00 00 00 00 <- 2 bytes of content 2, then 00 00, so no more files
또는 동일하지만 ASCII 인코딩이 없습니다. (그렇게 메모리에 저장할 수는 없습니다. 단지 가독성을 위해서입니다.)
G r e e t i n g
s . t x t 00 H e
l l o 00 U s e r
n a m e . t x t
00 g r o n o s t
a j 00 00 00 00 00 00
실제 파일 시스템은 또한 다음을 수행합니다.
- 파일 생성 및 수정 날짜, 속성, 권한, 메타데이터 및 기타 항목을 저장합니다.
- 파일을 찾을 때까지 전체 디스크를 검색하지 않고도 파일에 거의 즉시 액세스할 수 있도록 일종의 목차를 포함합니다.
- 지원 디렉토리
00
바이트가 포함된 파일 및 파일 이름 지원- 일부 실패로부터 복구 가능
- 다음 파일을 이동하지 않고 파일 길이 변경 지원
하지만 당신은 아이디어를 얻습니다.
이제 운영 체제.대부분의 컴퓨터 운영 체제는 파일로 구성되어 있으므로 운영 체제를 저장할 파일 시스템이 필요합니다. 그러나 영구 파일을 사용할 필요가 없고 파일에 저장되지 않는 모놀리식 OS를 만들 수 있습니다.프리RTOS한 예이다. 따라서 파일 시스템과 운영 체제는 일반적으로 긴밀하게 결합되어 있지만 실제로는 서로 없이도 존재할 수 있습니다.
"모놀리식"이란 "단일 바이너리 코드 조각"을 의미합니다. 소위 일 것이다.얼룩: 이름, 생성 날짜 또는 기타 속성이 없는 일련의 바이트입니다. 결국 CPU는 일련의 명령을 처리할 뿐입니다. 그들은 파일 메타데이터나 파일 시스템에 관심이 없으며 단지 실행할 작업만 제공받기를 원합니다. 그리고 이러한 명령어를 바이트로 표현할 수 있다면 블롭이면 충분합니다!
그리고 어떤 종류의 파일 시스템 없이도 Blob을 메모리에 쉽게 저장할 수 있습니다. 실제로 우리는 첫 번째 예에서 파일 1의 내용을 메모리에 넣을 때 그렇게 했습니다.
이것이 귀하의 질문에 대한 답변이 되기를 바랍니다!
답변2
BIOS, 운영 체제, 파일 시스템은 별개의 별도 요소이며, 운영 체제는 장치의 읽기 전용 메모리에 존재할 수 있습니다. 따라서 메시지가 동일하지 않습니다.그러나 운영 체제에는 프로그램과 하드웨어 간의 인터페이스 역할을 하는 한 가지 작업이 있습니다.장치에 운영 체제가 없으면 장치에서 실행되는 프로그램이 운영 체제입니다.
파일 시스템이 없거나 손상되거나 불완전한 파티션/파일 시스템이 보고되면 시스템에 운영 체제가 없는 것 같습니다. 하지만
... 대용량 저장 장치가 잘못 구성되었을 수 있습니다. 또는 더 구체적으로 말하면 BIOS가 사용하도록 구성된 헤드 및 트랙 수가 장치가 사용하도록 포맷된 헤드 및 트랙 수와 동일하지 않습니다. 이런 일이 발생하면 부트스트랩은 전체 파일 할당 시스템을 로드할 수 없습니다. 시스템에 배터리가 부족하여 설정 정보가 손실되었습니까? 그렇다면 BIOS 설정과 포맷을 올바르게 일치시키면 시스템이 복구됩니다...
BIOS는 하드웨어의 기본 인터페이스입니다. 운영 체제는 표준화된 프로그램용 인터페이스이므로 프로그램은 어떤 특정 하드웨어가 사용되는지 신경 쓸 필요가 없습니다. 파일 시스템은 대용량 저장 장치에 액세스하기 위한 표준 데이터 테이블입니다.
BIOS는 드라이버 인터페이스 장치의 읽기 전용 메모리에서 먼저 로드되어 액세스를 위한 인터럽트 지점을 설정합니다. Int 13은 대용량 저장 장치에 대한 액세스 포인트입니다.
https://en.wikipedia.org/wiki/INT_13H... 그런 다음 BIOS는 장치의 트랙 0, 섹터 0 및 부트스트랩 루틴에서 파티션 테이블을 로드합니다.http://www.ntfs.com/fat-partition-sector.htm
파티션 테이블은 하드 드라이브의 크기와 시스템 주소 파티션 테이블+3E 16진수의 부트스트랩 루틴을 모두 알려줍니다(리버스 엔지니어링을 올바르게 기억한다면 이는 시스템의 0000:063E 16진수입니다). 일반적으로 운영 체제를 로드합니다. 그리고 더욱 발전할 수 있는 드라이버.
컴퓨터의 OS가 대용량 저장 장치를 지원하지 않는 경우에도 이 BIOS 지원에 연결하여 대용량 저장 장치를 기반으로 시스템 확장을 구축할 수 있습니다. 그러나 BIOS에 대한 요청을 순차적으로 유지하기 위해 OS가 인터럽트를 켜고 끌 수도 있다는 점에 유의하세요.
BIOS 자체는 다중 스레드 작업을 처리할 수 없습니다. 특히 하드 드라이브가 특정 위치에서 읽거나 쓸 준비를 하도록 지시하기 위해 BIOS를 호출합니다. 그런 다음 읽기 쓰기 작업은 BIOS에 대한 두 번째 호출에서 수행됩니다. 한 프로그램이 데이터를 읽을 준비를 하는 동안 다른 프로그램이 데이터를 쓰려고 할 때 데이터를 덮어쓰게 되므로 더 발전된 운영 체제가 필요합니다.
데이터를 덮어쓰거나 다른 프로그램이 하드 드라이브나 BIOS를 사용하지 못하도록 잠그는 위험 없이 프로그램이 대용량 저장 장치를 사용하려면 파일 시스템이 필요합니다.
8080 시절 알테어 베이직이 사용했던 운영체제는 매우 미니멀했다. 파일 말하기를 시작할 헤드와 트랙을 지정하여 파일을 하드 드라이브에 저장할 수 있습니다. 파일 시스템은 사용되지 않았으며, 사용자는 파일이 저장된 헤드와 트랙 번호를 스스로 기억해야 했습니다.
디스크 운영 체제는 많지 않지만 작동했습니다. 키보드를 읽고 정보를 디스플레이에 보내는 루틴도 최소화되었습니다.
답변3
여기서 다루어야 할 두 가지 사항이 있다고 생각합니다.
- 일부 시스템에는 파일 시스템이 없습니다. 이는 OS가 없다는 뜻입니까?
- 파일 시스템이 없는 경우(또는 읽기 전용인 경우) 구성을 어디에 저장할 수 있습니까?
베어메탈
일부 시스템에는 운영 체제가 없습니다. 하나의 애플리케이션이 있고 해당 애플리케이션 소프트웨어는 하드웨어와 직접 인터페이스합니다. 이는 복잡성이 낮은 소형 마이크로 컨트롤러 시스템에서 일반적입니다. 이 시나리오에서 소프트웨어는 일반적으로 개발 팀이 처음부터 드라이버와 추상화를 작성하거나 공급업체 코드를 사용하여 설계 목표를 촉진하는 맞춤형 방식으로 이루어집니다.
말하자면, 그러한 시스템은5월파일 시스템을 지원합니다. 다음과 같은 간단한 파일 시스템지방일반적으로 로그를 저장하고 기능적으로 펌웨어 업데이트를 제공하는 데 사용됩니다.
구성은 파일 시스템을 사용하지 않고 원시 비휘발성 스토리지에 직접 포맷되고 기록되는 경우가 많습니다.
임베디드 시스템 - 스케줄러
수준이 올라가면 시스템이 약간 더 커지고 복잡성도 증가합니다. 이 시점에서 우리는 찾을 것입니다실시간 운영 체제(RTOS) - 모두가 실시간 요구 사항을 갖고 있는 것은 아니지만 특정 기능 세트로 설계되었습니다. 이러한 시스템은 "작업" 실행이 예정된 작업 - 일반적으로 다른/임의의 작업은 실행할 수 없습니다. 이러한 시스템에서는 공급업체 또는 커뮤니티에서 생성한 코드를 사용하여 파일 시스템, 네트워킹 등을 쉽게 지원하는 것이 일반적입니다.
구성은 원시 스토리지에 기록되거나 파일 시스템에 파일로 저장될 수 있습니다.
임베디드 시스템
이제 우리는 훨씬 더 큰 임베디드 시스템을 발견했습니다. 복잡성이 증가했으며 이 수준에서는 시스템 구성 및 애플리케이션/소프트웨어를 구성하기 위해 파일 시스템에 대한 의존성을 발견했습니다. 이제 우리는 임의의 응용 프로그램을 실행할 수 있으며 커널에는 다양한 하드웨어를 위한 전체 드라이버 로드가 함께 제공됩니다.
여기서 우리가 보고 있는 것은리눅스,QNX, "Windows 임베디드 컴팩트", 등...
소프트웨어는 일반적으로 구축됩니다~을 위한다음과 같은 프로젝트를 요청하는 시스템비지박스많은 기능을 제공하고 다음과 같은 프로젝트를 사용합니다.빌드루트그리고욕토다양한 애플리케이션을 구축하고 이미지를 생성합니다.
구성은 파일에 기록될 가능성이 높습니다. 하지만 이러한 시스템은 일반적으로 맞춤형 하드웨어에서 실행되므로 개발자가 이전처럼 원시 스토리지를 사용하는 것을 막을 수는 없습니다.
파일 시스템이 필요하지만 쓰기가 불가능할 수도 있고 순전히 "메모리 내" - 크기가 제한되어 있으며 재부팅 시 모든 변경 사항(RW의 경우)이 손실됩니다.
전체 사용자/서버 시스템
여기서 우리는 윈도우 시스템, 읽기-쓰기 파일 시스템(대개 큰 디스크에서), 다양한 임의 코드 실행, 구성이 확실히 파일로 저장되는 데스크톱 PC를 살펴봅니다. 이는 여러분에게 친숙한 시스템 유형입니다. 여기서 논의하는 용어에 따르면 서버는 일반적으로 데스크톱 PC와 매우 유사합니다.
Linux 세계에서는 "분포". 일반적으로 패키지 관리 형태를 찾을 수 있으므로 애플리케이션 설치/제거는 다운로드 및 압축 풀기의 문제입니다(다음과 같은 것을 사용하는 경우 컴파일도 마찬가지).젠투).
여기서는 Linux를 살펴보겠습니다.윈도우,윈도우 서버, 등...
위에서는 소규모 시스템이 일반적으로 원시 비휘발성 스토리지에 구성을 저장한다고 언급했습니다. 이는 무엇을 저장할지 결정하고, 데이터를 조합하고, 스토리지에 기록함으로써 수행됩니다.
예를 들어 다음과 같은 간단한 구성을 저장할 수 있습니다.
- 플랜지에는 정밀한
52458
회전 단계가 있습니다. - 플랜지는 다음 위치로 회전되어야 합니다
5547
.05:00
- 플랜지는 양전자로 회전해야 합니다
49885
.18:00
숫자는 모두 16비트 정수에 맞으므로 이를 사용하여 단계를 나타냅니다. 당분간 우리는 RTC와의 호환성을 높이기 위해 BCD에 저장하기로 결정했습니다.
우리는 다음과 같은 데이터를 가지고 있습니다:
- 52458 -->
0xCCEA
- 5547 -->
0x15AB
- 05:00 -->
0x0500
- 49885 -->
0xC2DD
- 18:00 -->
0x1800
값을 조합하여 10바이트로 저장소에 쓸 수 있습니다.
0x00000000 CC EA 15 AB 05 00 C2 DD 18 00
애플리케이션은 이를 해석하는 방법을 알고 있으므로 지원이 필요하지 않습니다. 지원이란 이름(예: 파일 시스템 및 파일 이름)으로 저장 영역을 찾고 사람과 구성에 대한 이해를 공유하는 것을 의미합니다(예:JSON/XML/YAML/TOML).