Базовая файловая система Omegicus Base File System

Данная файловая система предназначена, прежде всего, для загрузки системных файлов операционной системы, но может выполнять и роль повседневного спецхранилища, поскольку подразумевает примитивную простоту, что дает ей преимущество по скорости, а также широкий спектр прав на файлы, как и их шифрование и контроль целостности.

Набор специфик каждого файла достаточно широк, поскольку кроме собственно зарезервированных сстемных полей, стандарт подразумевает использование целого псевдо-файла - кластера для хранения расширеных специфик файла, как то мета-информации, причем хранится они должны как обычный нешифрованный файл, но с указанием специального его типа.

Контроль целостности осуществляется путем снятия контрольной криптографической хеш-суммой с области данных файла (открытого текста), пароля (при использовании шифрования) и хеш-суммы имени файла, что крайне повышает скорость прямого перебора файлов в текущем каталоге.

Ширина времени, под действие которого может попасть файл не имеет проблем и ограничений, поскольку время создания файла хранится в 64-битном числе, а модификация и просмотр фиксируется 32-битным смещением относительно последнего, что дает общий промежуток в многие миллиарды лет.

В любом случае, система, как говорилось, обладает практически неисчерпаемым ресурсом к расширению своей спецификации, что снимает проблему будущего расширения при большом технологическом скачке.

Мы посчитали необходимым и оправданным заложить подобное пространство действий, даже несмотря на просту структуру самой системы - хотя она и не предназначена для таких задач, какие решают, к примеру, ZFS или BFS, но время и опыт доказали, что лучше заложить избыточную расширяемость, чем потом "кусать себе локти".

Упрощенная спецификация файловой системы приведена ниже в виде ассемблерного кода под 86-ю архитектуру и представляет собой код генерации MBR-блока и последующих кластеров системы:

FORMAT BINARY AS 'img'

USE16
; = MBR ===================
	MBR_CODE	DB 446 DUP 0
	PART1:
		DB	0x80		; ACTIVE
		DB	0x00		; START_HEAD
		DW	0x00		; START CYL/SECT
		DB	0x47		; Type == OFS
		DB	0x00		; END HEAD
		DW	0x00		; END CYL/SECT
		DD	0x3F		; LBA START
		DD	0x10000	; PART SIZE IN SECTORS... 65k == 32M PARTITION
	PART2: DB 16 DUP 0
	PART3:
		DB	0x00		; ACTIVE
		DB	0x00		; START_HEAD
		DW	0x00		; START CYL/SECT
		DB	0x07		; Type == OFS
		DB	0x00		; END HEAD
		DW	0x00		; END CYL/SECT
		DD	0x10040		; LBA START
		DD	0x7F0000		; PART SIZE IN SECTORS... 65k == 32M PARTITION
	PART4: DB 16 DUP 0
	DB	0x55, 0xAA
;========================
PADDING1	DB 63*512 DUP 0
;========================








;== OMEGICUS FS ==============
OFS_VER	= 1			; FS VERSION
OFS_CS	= 8			; CLUSTER SIZE
OFS_SS	= 512		; SECTOR SIZE
OFS_PSIZE	= 0x10000	; PART SIZE IN SECTORS. divable by 64
OFS_EN	EQU 'NONE'	; ENCRYPTION
OFS_OW	EQU 'KABAKVLA'	; OWNER
OFS_BIT = 32			; OPT RECORD SIZE (bit)
OFS_OPT_SYST	EQU 0x0000001
OFS_OPT_FREE	EQU 0x0000000
OFS_OPT_BADB	EQU 0xFFFFFFFF
;OFS_OPT_FILL	= ANY
OFS_OPT_LAST	EQU 0xFFFFFFFE
;========================
; Нумерация кластеров - с 0-го, но
; пропуская 1-й.
;========================
; 32M part
OFS:
	DB	0xE8, 0x58, 0x90		; JMP
	DB	'OMEGICUS'				; SIGNATURE
	DB	OFS_VER				; FS VERSION
	DB	OFS_CS				; CLUSTER SIZE IN SECTORS
	DW	OFS_SS				; SECTOR SIZE
	DB	0					; R
	DD	OFS_PSIZE				; PART SIZE IN SECTORS
	DD	-1					; Number of Free Clusters (Set to -1 if Unknown)
	DD	-1					; ClusterNumber of Cluster that was Most Recently Allocated OR -1
	DD	0					; R
	DB	OFS_EN				; ENCRYPT TYPE, 4 bytes
	DQ	0, 0					; FUTURE HASH SUMM ( and used as SerialNum too)
	DQ	0					; TIMESTAMP OF CREATION
	DD	0					; SECONDS BETWEEN ACCESSED AND CREATED
	DD	0					; SECONDS BETWEEN MODIFIED AND CREATED
	DB	OFS_OW				; OWNER, 8 bytes
	DD	( OFS_PSIZE / OFS_CS ) * ( OFS_BIT / 8 ) / ( OFS_SS * OFS_CS ) ; OPT SIZE IN CLUSTERS. <==|
	DD	( OFS_PSIZE / OFS_CS ) * ( OFS_BIT / 8 ) / ( OFS_SS * OFS_CS ) ; CL# OF ROOT DIR START ==|
	DB	( OFS_SS * OFS_CS ) - ( $ - OFS ) DUP 0 ; R
	; CL#0: OPT
	OFS_PARTITION_TABLE:
		; CL#0..7 used by ROOT OPT
		DD	8  DUP OFS_OPT_SYST
		DD	OFS_OPT_LAST
		;DD	( ( OFS_PSIZE / OFS_CS ) * ( OFS_BIT / 8 ) ) -8 -1  DUP OFS_OPT_SYST
		DD	 ( OFS_PSIZE / OFS_CS ) -8 -1  DUP OFS_OPT_SYST
	; CL#8: ROOT DIR
	OFS_ROOT_DIR: ; x64bytes
		DD	0x48FE2390		; FileName Hash OR 'ZZZZ', 0x0000 - if last
		DD	sss_01+12			; FileSize, bytes. with FN size
		DB	12				; FileName Size
		DB	0x00				; FileName CodePage 0 = ASCII
		DW	0x8080			; Attr
		;  'DIR '
		;  0x0000 = EMPTY
		;  0x0001 = SYSTEM
		;  0x0002 = DELETED
		;  0x8080 = NORMAL FILE
		DQ	0x00000000		; CREATED UNIX TIMESTAMP64
		DD	0x00000000		;	MODIFIED: SECONDS FROM CREATED
		DD	0x00000000		;	ACCESSED: SECONDS FROM CREATED
		DD	0x00000001		; Type Of FILE. 0 = NONE, 1=ANY TYPE (BINARY)
		DD	0x00000000		; HASH32 OF UNENCRYPTED FILE
		DD	0x00000000		; HASH32 OF PASSWORD || 0 IF NOT ENCRYPTED
		DD	0x00000009		; START CLUSTER
		DD	0x0				; R
		DQ	2 DUP 0			; R
		; PADDING REST AREA
		DB	(64 * (64-1)) DUP 0
	; CL#9: DATA
	OFS_DATUM:
		DB	'testfile.txt'
		ssz_01:
		DB	13,13,'   WELCOME TO OMEGICUS SYSTEMICUS! BE HAPPY ;-)'
		sss_01 = $ - ssz_01
		DB	( OFS_SS * OFS_CS )  - 12 - sss_01 DUP '+'

Отправить заявку на создание сайта

Сообщение отправлено