WEBVTT

1
00:05.550 --> 00:11.610
Evet arkadaşlar, şimdi iç mantığını
çalıştırmak için olay

2
00:11.610 --> 00:14.700
döngüsü kullanan uygulamaların neden
kilitlenmediğini anlamaya çalışalım.

3
00:15.360 --> 00:18.480
Dolayısıyla, çift döngü kullanan
uygulamalar kilitlenmez.

4
00:18.510 --> 00:22.020
Bu yüzden bunu iddia ediyorum, sizce doğru
mu yanlış mı?

5
00:23.720 --> 00:30.770
Uygulama mantığı sadece görev üzerinden
yürütüldüğü sürece, programımızda herhangi

6
00:30.770 --> 00:32.600
bir tehdit, senkronizasyon veya kilitleme
karmaşasına gerçekten ihtiyacımız yoktur.

7
00:33.170 --> 00:38.510
Dolayısıyla bu noktayı anlamak için
öncelikle en temel düzeyde şunu anlamamız
gerekir: Normal

8
00:38.510 --> 00:43.760
bir çok iş parçacıklı ortamda ya da normal
bir çok iş parçacıklı programda

9
00:44.150 --> 00:51.050
neden günlüklere ihtiyacımız var? Bu
noktayı çok iyi anlarsanız, olay
döngülerini kullanan uygulamada

10
00:51.050 --> 00:55.760
gerçekten kilitli serbest veya tuzaklı
senkronizasyon serbest olduğu konusunda da
mantık yürütebilirsiniz.

11
00:57.700 --> 01:03.640
Peki, çocuklar, çok iş parçacıklı bir
ortamda neden kilitlemeye ihtiyacımız
olduğu

12
01:04.510 --> 01:11.410
sorusu ortaya çıkıyor? Dolayısıyla, çok iş
parçacıklı bir programınız olduğunda,

13
01:11.410 --> 01:12.460
veri bütünlüğünü sağlamak için iş
parçacığı senkronizasyonunda oturum
açmanız gerekir.

14
01:13.600 --> 01:20.410
Yani tek bir cümleyle ifade etmek
gerekirse, kilitlemeye ihtiyacımız

15
01:20.410 --> 01:21.220
var çünkü iş parçacıkları programın
rastgele noktalarında bağlam değiştiriyor.

16
01:21.580 --> 01:24.340
Temel işletim sisteminiz de bu şekilde
tasarlanmıştır.

17
01:24.910 --> 01:32.530
Kullanıcı alanı iş parçacıklarının
herhangi bir keyfi noktada bağlam
değiştirmeye tabi tutulmasıdır.

18
01:33.490 --> 01:40.120
Eğer bunu kontrol edebilirseniz, yani
programcı olarak kullanıcı alanı iş
parçacıklarınızın

19
01:40.120 --> 01:48.430
yalnızca programda tanımlanmış ya da
programcı tarafından karar verilmiş
noktalarda bağlam

20
01:48.430 --> 01:55.990
değiştirmesini kontrol edebilirseniz, o
zaman çok iş parçacıklı bir ortamda

21
01:56.200 --> 01:58.030
bile herhangi bir senkronizasyon ya da
kilit türüne ihtiyaç duymazsınız.

22
01:58.390 --> 02:00.070
Ama bu öyle bir şey değil.

23
02:00.070 --> 02:06.700
İşletim sistemlerimiz, bir iş parçacığının
programın hangi noktasında yürütüldüğü
konusunda

24
02:07.030 --> 02:11.110
endişelenmeden sadece kullanıcı alanı
tuzaklarından bağlam değiştirmeyi
tetiklemek için tasarlanmıştır.

25
02:11.950 --> 02:18.130
İşte bu noktayı anlamak için çok iş

26
02:18.130 --> 02:21.050
parçacıklı programlarımızda iş parçacığı
senkronizasyonunda kilitlere

27
02:21.100 --> 02:22.450
neden ihtiyaç duyuyoruz? Bir örnek
verelim.

28
02:23.080 --> 02:31.000
Burada bağlantılı bir listemiz var ve D1
konuları bu bağlantı listesi üzerinde

29
02:31.000 --> 02:34.240
çalışıyor ve çekici olan bu nord'u bu
bağlantı listesinden çıkarmak istiyor.

30
02:34.960 --> 02:39.340
Yani sonuç olarak T1 iş parçacığı işlemler
için gerçekleştirmelidir.

31
02:40.030 --> 02:47.500
İlk işlem, viral yükü atlayarak işaretçiyi
bir

32
02:47.500 --> 02:48.130
önceki düğümden bir sonraki düğüme
ayarlamaktır.

33
02:48.850 --> 02:50.320
Yani bu operasyon No.

34
02:50.320 --> 02:50.620
Bir.

35
02:52.190 --> 02:52.600
Tamam.

36
02:52.970 --> 02:55.850
İkinci işlem ise bu işlemin tersidir.

37
02:57.080 --> 03:02.390
Bu, maksimum notanın hemen bir önceki
noktasında, Nord'un

38
03:02.390 --> 03:03.380
silinmekte olan önceki modeline çok sıkıcı
geliyor.

39
03:03.830 --> 03:11.240
Tartışmamızı kolaylaştırmak için bu
düğümleri Node E Node B. ve Nord CE olarak
belirleyelim.

40
03:12.220 --> 03:12.610
Tamam.

41
03:14.800 --> 03:22.960
Daha sonra üç numaralı işlemde ve
trajediden önce, B düğümünün

42
03:23.080 --> 03:30.100
sol işaretçisi olan bu konuma ahlaki değer
ve ayrıca düğümün

43
03:30.280 --> 03:38.050
sağ noktasına -- değeri koyulmalıdır.
31'in B düğümünü bu bağlantı

44
03:38.050 --> 03:40.150
listesinden tamamen ayırmak için bu dört
işlemi gerçekleştirmesi gerektiğini
gördük.

45
03:40.960 --> 03:41.350
Tamam.

46
03:41.920 --> 03:48.040
Şimdi bir durum düşünün ki, antlaşmanın
imzalanması sırasında bir numaralı
operasyon tamamlanmış olsun.

47
03:48.040 --> 03:50.560
Birincisi, bağlam değiştirme gerçekleşir.

48
03:54.370 --> 03:58.240
Konu bu, sadece operasyonun yapılmasını mı
istiyorsunuz, hayır.

49
03:58.240 --> 04:01.330
Bir ve işlemi gerçekleştiremeden önce No.

50
04:01.330 --> 04:07.810
İki ya da üç ve dört, bağlam değiştirme

51
04:07.810 --> 04:08.350
gerçekleşir ve 31 yerine, sisteme girmeye
hazır değil.

52
04:08.650 --> 04:10.360
Yani, CPU'ya yüklenir.

53
04:11.410 --> 04:18.790
Bu enkaz bağlantı listesine çekilen Dude
aşağıdaki gibi görünecektir a düğüme bağlı
değildir.

54
04:18.790 --> 04:25.720
Bu, 381'in birinci işlemi
gerçekleştirmesinden ve bağlam değiştirme
tetiklemesinden hemen sonradır.

55
04:27.900 --> 04:37.770
Nord sol işaretçinin geride kalmamaya ve
geride bırakılmamaya bağlı olduğunu veya A
Düğümüne bağlı olduğunu görür.

56
04:38.920 --> 04:42.370
Ve doğru değil, nokta Kuzey Denizi'ne
bağlı.

57
04:43.210 --> 04:51.280
Dolayısıyla, bu çift bağlantılı listenin
tehdit veri görselleştirmesinin tamamen
berbat

58
04:51.280 --> 04:59.110
olduğunu görebilirsiniz ve tüm kök neden,
trajedinin bağlantı listesi

59
04:59.110 --> 05:05.650
üzerinde bir işlem yaparken bağlam
değiştirme yapması ve tetiklenen

60
05:05.740 --> 05:06.250
bağlam olduğunda bu işlemin tamamlanmamış
olması nedeniyle ortaya çıkmaktadır.

61
05:07.030 --> 05:13.390
Dolayısıyla, bir veri yapısı güncelleme
sürecinde olduğunda ve güncelleme

62
05:13.390 --> 05:16.150
henüz tamamlanmadığında, veri yapısının
tutarsız bir durumda olduğunu görürüz.

63
05:16.600 --> 05:23.140
Dolayısıyla, 381 bu bağlantı listesindeki
dört işlemi de tamamlayana

64
05:23.140 --> 05:25.300
kadar, bu enkaz bağlantı listesi tutarsız
bir durumda olacaktır.

65
05:25.630 --> 05:31.750
Dolayısıyla, iş parçacıklarının veri
yapılarını tutarsız bir durumda görmesini
asla

66
05:31.750 --> 05:33.160
istemeyiz ve günlüğe kaydetme işleminin
gerekli olmasının nedeni de budur.

67
05:33.670 --> 05:42.940
Hiç kimse işlemi gerçekleştirilmeden önce
bu bağlantı listesi kaydedilirse,

68
05:42.940 --> 05:45.910
hiç kimse işlemi gerçekleştirildikten
sonra bağlam değiştirme gerçekleşse bile.

69
05:45.910 --> 05:55.300
Birincisi, iş parçacığı verileri tutarsız
bir bağlantı listesi üzerinde

70
05:55.300 --> 05:57.880
işlem yapamayacaktır çünkü bağlantı
listesi Treaty tarafından günlüğe
kaydedilmiştir.

71
05:58.600 --> 06:04.900
Tabii ki, tehdit katmanı, işlemini
gerçekleştirdikten sonra mutantların

72
06:04.930 --> 06:05.800
veya bu veri yapılarının kilidini açmak
zorundadır.

73
06:06.880 --> 06:12.790
Şimdi programımızdaki tüm iş parçacığı
senkronizasyonunu kilitlemeye neden
ihtiyaç duyduğumuz sonucuna varmak

74
06:12.790 --> 06:20.050
gerekirse, tehditlerin bir programın
rastgele noktalarında bağlam değiştirmeye
maruz kalması nedeniyle, bir

75
06:20.050 --> 06:26.320
şekilde işletim sisteminizi, kontrolü
geliştiricinin ellerine verecek şekilde,
tehditlerin yalnızca bir geliştirici

76
06:26.650 --> 06:35.080
istediğinde bağlam değiştirmeye maruz
kalacağı şekilde değiştirebilirseniz,
geliştiricinin tehditlerin yalnızca hiçbir
uygulama

77
06:35.080 --> 06:41.710
veri yapısının tutarlı bir durumda
kalmadığından yüzde 100 emin olunduğunda
bağlam

78
06:41.710 --> 06:47.650
değiştirmeye maruz kalacağı şekilde bir
kod parçası yazması her zaman mümkündür.

79
06:48.010 --> 06:54.760
Eğer amaç buysa, çok iş parçacıklı ortamda
bile herhangi

80
06:54.760 --> 06:56.170
bir kilitleme veya tehdit senkronizasyon
mekanizmasına ihtiyacınız olmayacaktır.

81
06:57.160 --> 06:58.600
Ama durum böyle değil.

82
06:58.600 --> 07:06.160
İşletim sistemlerimiz, çok çekirdekli
sistemlerin tüm veriminden yararlanmak
için bu şekilde tasarlanmamıştır.

83
07:06.460 --> 07:12.280
İşletim sistemleri, bir programın hangi
noktasında iş parçacıklarının doğru

84
07:12.280 --> 07:18.810
çalıştığını beklemeden veya dikkate
almadan kullanıcı tabanlı tehditler

85
07:18.820 --> 07:19.090
arasında bağlam geçişini tetiklemek için
bağlanmak üzere tasarlanmıştır.

86
07:19.300 --> 07:26.020
Bağlam değişimlerinde veri bütünlüğünün ve
tutarlılığının korunmasını sağlamak için
uygun

87
07:26.320 --> 07:31.900
senkronizasyon veya kilitli kilitleme
mekanizmaları kullanmak da geliştiricinin
sorumluluğundadır.


