sgdisk :Принудительное выравнивание конечного сектора

[Я не читал про APUE, но то, что вы цитируете, выглядит не очень]

if my program uses a system call, it would be interrupted/stopped, if at any time the program catches a signal.

Не любой системный вызов. Только некоторые системные вызовы могут быть прерваны.

(Does default handler also count as a catch?)

For example, if I have a read system call, which reads 10GB data, when it's reading, I send any one of signals(e.g.kill -SIGUSR1 pid), then read would fail and return.

Прочитанные вами 10 ГБ ()вернутся с EINTR только в том случае, если они были прерваны до того, как вы смогли прочитать хотя бы один байт ; в противном случае он вернет объем данных, который уже был прочитан (short read = success, errno не имеет значения ).

[это не было объяснено в связанном обмане]

So if I my understanding are all correct, what/why should I care about interrupted system call now..? It seems the system/OS handles it automatically.

Потому что вы можете захотеть что-то сделать после получения сигнала, а обработчик сигнала мало что может сделать; ни о чем, использующем malloc ()или stdio (, даже о printf ())не может быть и речи. Таким образом, вы должны обрабатывать прерывания в основном цикле программы, и чтобы иметь возможность сделать это, вы должны как-то выйти из блокирующего чтения ()(, чтение ()может блокироваться даже после возврата опроса (). fd как готовый к чтению ).

[это было также объяснено в связанном обмане]

1
09.06.2020, 19:38
1 ответ

Похоже, вы пытаетесь решить проблему, которой у вас нет или вы не совсем понимаете. Требование выравнивания разделов относится только к началу раздела.

Вот моя идеально выровненная таблица разделов:

Disk /dev/sda: <skipped>
Disk model: <skipped>
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: <skipped>

Device         Start       End   Sectors   Size Type
/dev/sda1       2048    206847    204800   100M EFI System
/dev/sda2     206848    468991    262144   128M Linux filesystem
/dev/sda3     468992  67577855  67108864    32G Linux filesystem
...

Обратите внимание на то, что все конечные сектора "не выровнены".

0
18.03.2021, 23:32

Теги

Похожие вопросы