옵션 |
|
기술용어중 하나를 인터넷과 나의 설명을 비교해 보려고 한다.
먼저 인터넷에서 하는 상호배타에 대한 설명이다.
[Mutual exclusive(상호배타)]
오류가 일어나지 않으려면 공통 변수에 대한 업데이트는 오직 한 쓰레드만 들어가 있을 때 진행되어야 한다.
즉 Parent가 critical section에 들어가면 그 순간에는 Child가 critical section에 들어가면 안된다.
[임계구역 문제(Critical-Section Problem)]
Critical section(임계구간, 치명적인 구간): 이 구간에서 아주 치명적인 오류가 발생할 수 있다.
A system consisting of multiple threads.
Each thread has a segment of code, called critical section, in which the thread may be changing common variables, updating a table, writing a file, and so on
여러개의 쓰레드로 구성된 시스템에서 각각의 쓰레드는 어떤 코드의 영역을 가지고 있는데, 그 코드의 영역을 임계구역이라고 한다.
이 임계구역이 되기 위해서는 여러 쓰레드들이 공통의 변수, 테이블, 파일들을 바꾸는 부분 코드를 임계구역이라고 한다.
========================================
한마디로 머리 아프고 이해가 안된다.
나를 이렇게 설명한다.
두 개의 모듈이나 코딩한 부분이 하나의 메모리를 writing 하려는 부분이 있어, 이 메모리 부분을 '크리티컬섹션'(Critical-Section)이라고 해.
두 놈이 동시에 write 하면 어떻게 될까?
한 놈은 '1' 한놈은 '0'.
뭐를 write 해야하는지 알수가 없지. 어떻게 해야할까?
모든 OS는 이런 상황에서 배째라고 멈추어 서 버려.
어떻게 해야 될지 모르니, 큰 일이 난거지.
이걸 '상호배타' 오류가 발생했다고해.
예를들면 워드프로그램으로 문서를 열어봐.
같은 걸 두 번 열면 '읽기모드로 열겠습니까?'하고 물어보지.
두 놈이 서로 write 하는 것을 막는 장치도 되.
한 문서는 하나의 메모리에 존재하는게 당연하고, 동시에 write 하면, os가 멈추어 서버리지.
한 놈은 read, write, 한놈은 read만 하면, 동시에 쓰기는 불가능 한거지.
우리가 아는 워드 프로그램도 Mutual exclusive(상호배타)오류를 막기 위한 설계가 되어 있는 것이지.
프로그램을 만들때, 이런 부분을 조심해서 다루어야해.
상호배타 오류가 발생하면, 컴퓨터는 모르겠다고 멈추어 버리거나 리셋 되거든.
누가 먼저 쓸지 명확히 순서를 정해 주어야 한다는 거지.
이걸 '동기화' 라고해.
A 너가 먼저 사용후에, B 너가 다음에 사용해라고 순서를 정해주는 거지.
처음 만들때 설계에서 고려해야지 나중에 수정 하려면 찾는것 조차 쉽지가 않아.
앞에 있는 인터넷 설명을 다시 읽어 보면, 이제 이해가 될 것이다.
==========================================================
전문용어로는 전문가처럼 보이게 할 뿐이다.
정확히 이해하고, 쉽게 설명해야한다.
쉽게 설명하지 못 한 다는 것은, 스스로 잘 이해하지 못한 것이다.
물론 복잡한 것이면, 긴 시간이 필요한 수도 있다.