Режим Управления системой не является единственной вещью, которая делает x86 плохо в жесткое реальное время. Непредсказуемость скорости выполнения из-за кэшей, конвейеры и так далее делают x86 и любой другой высокопроизводительный процессор, плохо в реальное время. Все эти функции, которые заставляют процессор быстро в среднем также сделать худший случай трудным справиться.
Текущее поколение микросхем ARM разделено на три ряда: Кора для высококачественных микропроцессоров (самая близкая вещь к x86), Cortex-R для приложений реального времени и Cortex-M в профиле микроконтроллера. Cortex-R не имеет MMU (у некоторых есть MPU), но может иметь кэш. Это используется во многих приложениях реального времени (ARM пытается конкурировать с DSPS, справедливо успешно).
Сама архитектура ARM не определяет ничего как SMM. Возможно, что производители микросхемы добавляют что-то как он, необходимо было бы посмотреть на документацию производителя.
Можно использовать awk
. Поместите следующее в сценарий, script.awk
:
FNR == NR {
f1[$1,$2,$4] = $0
f1_c14[$1,$2,$4] = 1
f1_c5[$1,$2,$4] = $5
next
}
f1_c14[$1,$2,$4] {
if ($5 != f1_c5[$1,$2,$4]) print f1[$1,$2,$4];
}
f1[$1,$2,$4] {
if ($5 != f1_c5[$1,$2,$4]) print $0;
}
Теперь выполните его как это:
$ awk -f script.awk file1 file2
sc2/80 20 . A T 86 PASS N=2 F=5;U=4
sc2/80 20 . A C 80 PASS N=2 F=5;U=4
sc2/60 55 . G T 76 PASS N=2 F=5;U=4
sc2/60 55 . G C 72 PASS N=2 F=5;U=4
Сценарий работает следующим образом. Этот блок создает 3 массива, f1
, f1_c14
, и f1_c5
. f1
содержит все строки file1 в массиве, индексированное использование содержания столбцов 1, 2, и 4 от file1. f1_c14
другой массив с тем же индексом (1, 2, и 4's содержание) и значение 1
. 3-й массив использует тот же индекс в качестве 1-х 2 со значением 5-го столбца от file1.
FNR == NR {
f1[$1,$2,$4] = $0
f1_c14[$1,$2,$4] = 1
f1_c5[$1,$2,$4] = $5
next
}
Следующий блок ответственен за печать строк из 1-го файла, file1
при условиях, от которых столбцы 1, 2, и 4 соответствуют столбцам file2
, И это будет onlu распечатать строку от file1
если 5-е столбцы file1
и file2
не соответствовать.
f1_c14[$1,$2,$4] {
if ($5 != f1_c5[$1,$2,$4]) print f1[$1,$2,$4];
}
3-й блок ответственен за печать связанной строки от file2
в массиве существует соответствующая строка f1
для file2
столбцы 1, 2, и 4. Снова это только печатает, если 5-е столбцы не соответствуют.
f1[$1,$2,$4] {
if ($5 != f1_c5[$1,$2,$4]) print $0;
}
Выполнение вышеупомянутого сценария как так:
$ awk -f script.awk file1 file2
sc2/80 20 . A T 86 PASS N=2 F=5;U=4
sc2/80 20 . A C 80 PASS N=2 F=5;U=4
sc2/60 55 . G T 76 PASS N=2 F=5;U=4
sc2/60 55 . G C 72 PASS N=2 F=5;U=4
Можно использовать column
управляйте для чистки вывода немного:
$ awk -f script.awk file1 file2 | column -t
sc2/80 20 . A T 86 PASS N=2 F=5;U=4
sc2/80 20 . A C 80 PASS N=2 F=5;U=4
sc2/60 55 . G T 76 PASS N=2 F=5;U=4
sc2/60 55 . G C 72 PASS N=2 F=5;U=4
Это использует awk
способность циклично выполниться через файлы конкретным способом. Вот, мы - цикличное выполнение через файлы и когда мы находимся на строке, это из первого файла, file
, мы хотим выполнить конкретный блок кода на этой строке от file1
.
Этот пример показывает что FNR == NR
делает, когда мы даем ему 2 моделируемых файла. У каждого есть 4 строки в нем, в то время как другой имеет 5 строк:
$ awk 'BEGIN {print "NR\tFNR\tline"} {print NR"\t"FNR"\t"$0}' \
<(seq 1 4) <(seq 1 5)
NR FNR line
1 1 1
2 2 2
3 3 3
4 4 4
5 1 1
6 2 2
7 3 3
8 4 4
9 5 5
другие блоки
Другие блоки, f1_c14[$1,$2,$4]
И f1[$1,$2,$4]
только выполненный, когда значения от тех элементов массива имеет значение.
Вот решение в Perl. Необходимо сохранить следующий код в файле и выполнить его как сценарий (см. ниже):
#!/usr/bin/perl
$file1 = '/path/to/file1';
$file2 = '/path/to/file2';
open $f1,'<',$file1;
open $f2,'<',$file2;
while(<$f1>){
($c1,$c2,$c4,$c5) = (split / /)[0,1,3,4]; #get relevant columns in file 1
$lines_dictionary{"$c1 $c2 $c4"}="$c5---$_"; #create a hash entry keyed by the relevant columns
}
while(<$f2>){
($c1,$c2,$c4,$c5) = (split / /)[0,1,3,4]; #get relevant columns in file 2
if(exists $lines_dictionary{"$c1 $c2 $c4"}){ #if a line with similar columns was seen in file 1
($file1_c5,$file1_line) = split /---/,$lines_dictionary{"$c1 $c2 $c4"}; #parse the hash entry this line in file 1
if($file1_c5 -ne $c5){ #if column 5 of file 2 doesn't match column 5 of file 1
print "${file1_line}$_\n"; #we only need one extra newline as the lines read from the files have trailing ones.
}
}
}
close $f1;
close $f2;
Используйте любой текстовый редактор, чтобы вставить этот сценарий в файл, изменить $file1
и $file2
переменные для отражения истинных местоположений файлов затем сделайте исполняемый файл сценария путем выполнения:
$ chmod +x /path/to/script
Наконец, назовите сценарий:
$ /path/to/script
Отказ от ответственности