lkml.org 
[lkml]   [2016]   [Jul]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v4 3/3] Doc/memory-barriers: Add Korean translation
On Mon, Jul 04, 2016 at 08:27:08AM +0900, SeongJae Park wrote:
> +===================================
> +이 문서는
> +Documentation/memory-barriers.txt
> +의 한글 번역입니다.
> +
> +역자: 박성재 <sj38.park@gmail.com>
> +===================================
> +
> +
> + =========================
> + 리눅스 커널 메모리 배리어
> + =========================
> +
> +저자: David Howells <dhowells@redhat.com>
> + Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> + Will Deacon <will.deacon@arm.com>
> + Peter Zijlstra <peterz@infradead.org>
> +
> +========
> +면책조항
> +========
> +
> +이 문서는 명세서가 아닙니다; 이 문서는 완벽하지 않은데, 간결성을 위해 의도된
> +부분도 있고, 의도하진 않았지만 사람에 의해 쓰였다보니 그러한 부분도 있습니다.

I will add my opinion in korean.

그러한 부분 -> 불완전한 부분

> +이 문서는 리눅스에서 제공하는 다양한 메모리 배리어들을 사용하기 위한
> +안내서입니다만 뭔가 이상하다 싶으면 (그런게 많을 겁니다) 질문을 부탁드립니다.
> +
> +다시 말하지만, 이 문서는 리눅스가 하드웨어에 기대하는 사항에 대한 명세서가
> +아닙니다.
> +
> +이 문서의 목적은 두가지입니다:
> +
> + (1) 어떤 특정 배리어에 대해 기대할 수 있는 최소한의 기능을 명세하기 위해서,
> + 그리고
> +
> + (2) 사용 가능한 배리어들에 대해 어떻게 사용해야 하는지에 대한 안내를 제공하기
> + 위해서.
> +
> +어떤 아키텍쳐는 특정한 배리어들에 대해서는 여기서 이야기하는 최소한의
> +요구사항들보다 많은 기능을 제공할 수도 있습니다만, 여기서 이야기하는
> +요구사항들을 충족하지 않는 아키텍쳐가 있다면 그 아키텍쳐가 잘못된 것이란 점을
> +주의하시기 바랍니다.

주의하시기 -> 알아두시기

> +
> +또한, 일부 배리어는 특정 아키텍쳐에서는 해당 아키텍쳐의 동작 방식으로 인해
> +명시적으로 해당 배리어의 명시적 사용이 불필요해서 no-op 이 될수도 있음에

"명시적" 이라는 단어는 한번만...

> +주의하시기 바랍니다.

주의하시기 -> 알아두시기

> +=======================
> +추상 메모리 액세스 모델
> +=======================
> +
> +다음과 같이 추상화된 시스템 모델을 생각해 봅시다:
> +
> + : :
> + : :
> + : :
> + +-------+ : +--------+ : +-------+
> + | | : | | : | |
> + | | : | | : | |
> + | CPU 1 |<----->| Memory |<----->| CPU 2 |
> + | | : | | : | |
> + | | : | | : | |
> + +-------+ : +--------+ : +-------+
> + ^ : ^ : ^
> + | : | : |
> + | : | : |
> + | : v : |
> + | : +--------+ : |
> + | : | | : |
> + | : | | : |
> + +---------->| Device |<----------+
> + : | | :
> + : | | :
> + : +--------+ :
> + : :
> +
> +각 CPU 는 메모리 액세스 오퍼레이션들을 발생시키는 프로그램을 실행합니다.
> +추상화된 CPU 모델에서 메모리 오퍼레이션들의 순서는 매우 완화되어 있고, CPU 는
> +프로그램이 인과관계를 어기지 않는 상태로 관리된다고 보일 수만 있다면 메모리
> +오퍼레이션들을 자신이 원하는 어떤 순서대로든 재배치해 실행할 수 있습니다.

영어는 긴 문장을 자주 사용하는 것 같아요. 반면에 한국어는 문장이 길어지면
읽기가 좀더 어려워 지는 것 같습니다. 필요하면 여러 문장 이상으로 분리하는
것이 좋을 것 같습니다. 이 문장도 두 문장으로 분리하는 게 더 좋지 않을까요?

> +비슷하게, 컴파일러 또한 프로그램의 정상적 동작을 해치지 않는 한도 내에서는 어떤
> +순서로든 자신이 원하는 대로 명령어들을 재배치 할 수 있습니다.
> +
> +따라서 위의 다어그램에서 한 CPU가 수행하는 메모리 오퍼레이션의 효과는
> +오퍼레이션이 CPU 와 시스템의 다른 부분들 사이의 인터페이스 (점선) 를 지나갈 때
> +시스템의 나머지 부분들에 전파됩니다.

따라서 위의 다*이*어그램에서 한 CPU가 수행하는 메오리 오퍼레이션의 결과는
오퍼레이션이 CPU와 시스템의 다른 부분들 사이의 인터페이스(점선)를 지날 때
시스템의 나머지 부분들이 인지할 수 있게 됩니다.

> +
> +
> +예를 들어, 다음의 일련의 이벤트들을 생각해 봅시다:
> +
> + CPU 1 CPU 2
> + =============== ===============
> + { A == 1; B == 2 }
> + A = 3; x = B;
> + B = 4; y = A;
> +
> +그림의 가운데 위치한 메모리 시스템에 보여지게 될 액세스들은 다음의 총 24개 서로
> +다른 조합으로 재구성될 수 있습니다:

그림 가운데에 위치한 메모리 시스템에 보여지게 되는 엑세스 조합은 (...)

> +
> + STORE A=3, STORE B=4, y=LOAD A->3, x=LOAD B->4
> + STORE A=3, STORE B=4, x=LOAD B->4, y=LOAD A->3
> + STORE A=3, y=LOAD A->3, STORE B=4, x=LOAD B->4
> + STORE A=3, y=LOAD A->3, x=LOAD B->2, STORE B=4
> + STORE A=3, x=LOAD B->2, STORE B=4, y=LOAD A->3
> + STORE A=3, x=LOAD B->2, y=LOAD A->3, STORE B=4
> + STORE B=4, STORE A=3, y=LOAD A->3, x=LOAD B->4
> + STORE B=4, ...
> + ...
> +
> +따라서 다음의 네가지 조합의 결과가 나올 수 있습니다:

(...) 조합이 나올 수 있습니다.

> +
> + x == 2, y == 1
> + x == 2, y == 3
> + x == 4, y == 1
> + x == 4, y == 3
> +
> +
> +더욱이, 한 CPU 에 의해 메모리 시스템에 행해진 스토어 오퍼레이션들은 다른 CPU 의
> +로드 오퍼레이션 들에 스토어가 행해진 순서와 다른 순서로 읽혀질 수 있습니다.

훨씬 읽기 좋아지긴 했지만, 아직도 직역을 해서 읽기 어색한 부분이이 꽤 남아
있는 것 같습니다. 수정 부탁드립니다.

(..) 한 CPU가 메모리 시스템에 반영한 스토어 오퍼레이션들은 다른 CPU에서
로드 오퍼레이션을 통해서 인지할 수 있는데, 이 때 스토어가 반영된 순서대로
보여지지 않을 수 있습니다.

> +
> +
> +예로, 아래의 일련의 이벤트들을 생각해 봅시다:
> +
> + CPU 1 CPU 2
> + =============== ===============
> + { A == 1, B == 2, C == 3, P == &A, Q == &C }
> + B = 4; Q = P;
> + P = &B D = *Q;
> +
> +D 로 읽혀지는 값은 CPU 2 에서 P 로부터 읽혀진 주소값에 의존적이기 때문에 여기엔
> +분명한 데이터 의존성이 있습니다. 이 이벤트들의 실행 결과로는 아래의 결과들이
> +모두 나타날 수 있습니다:
> +
> + (Q == &A) and (D == 1)
> + (Q == &B) and (D == 2)
> + (Q == &B) and (D == 4)
> +
> +CPU 2 는 *Q 의 로드를 요청하기 전에 P 를 Q 에 넣기 때문에 D 에 C 를 집어넣는
> +일은 없음에 주의하세요.

주의하세요 -> 알아두세요

> +
> +
> +디바이스 오퍼레이션
> +-------------------
> +
> +일부 디바이스들은 제어 인터페이스를 메모리 위치의 집합으로 제공하는데, 해당

일부 디바이스들은 제어 인터페이스가 메모리 내 일부 영역에 위치하는 데, 이때 해당

> +컨트롤 레지스터에 접근하는 순서는 매우 중요합니다. 예를 들어, 어드레스 포트

문서 전체에 걸쳐서 컨트롤 또는 제어 중에 선택해서 번역해 주세요.

> +레지스터 (A) 와 데이터 포트 레지스터 (D) 를 통해 접근되는 내부 레지스터 집합을
> +갖는 이더넷 카드를 생각해 봅시다. 내부의 5번 레지스터를 읽으려면 다음의 코드가
> +사용될 수 있을 겁니다:

(...) 읽기 위해 다음 코드가 사용될 수 있습니다:

> +
> + *A = 5;
> + x = *D;
> +
> +하지만 이건 다음의 두 조합 중 하나로 보여질 수 있을 겁니다:

(...) 있습니다:

> +
> + STORE *A = 5, x = LOAD *D
> + x = LOAD *D, STORE *A = 5
> +
> +두번째 조합은 데이터를 읽어온 _후에_ 주소를 설정하므로, 잘못된 동작을 일으킬
> +것입니다.
> +
> +
> +보장사항
> +--------
> +
> +CPU 에게 기대할 수 있는 최소한의 보장사항 몇가지가 있습니다:
> +
> + (*) 어떤 CPU 든, 의존성이 존재하는 메모리 액세스들은 해당 CPU 자신에게
> + 있어서는 해당 순서 그대로 요청됩니다. 즉, 다음에 대해서는:

요청됩니다. -> 수행됩니다.

> +
> + Q = READ_ONCE(P); smp_read_barrier_depends(); D = READ_ONCE(*Q);
> +
> + CPU 는 다음과 같은 메모리 오퍼레이션들을 요청합니다:

(...) 아래 메모리 오퍼레이션을 수행합니다:

> +
> + Q = LOAD P, D = LOAD *Q
> +
> + 그리고 그 순서는 항상 지켜집니다. 대부분의 시스템에서
> + smp_read_barrier_depends() 는 아무일도 안하지만 DEC Alpha 에서는
> + 명시적으로 사용되어야 합니다. 보통의 경우에는 smp_read_barrier_depends()
> + 를 직접 사용하는 대신 rcu_dereference() 같은 것들을 사용해야 함을
> + 주의하십시오.

주의하십시오 -> 알아두세요.

> +
> + (*) 특정 CPU 내에서 겹쳐서 행해지는 로드와 스토어 들은 그 CPU 안에서는 순서가

메모리 영역이 겹치는 로드와 스토어가 한 CPU 내에서 수행될 경우, 해당 CPU
내에서 보았을 때에 그 순서는 바뀌지 않습니다. (...)

> + 맞춰진 것으로 나타납니다. 즉, 다음에 대해서:
> +
> + a = READ_ONCE(*X); WRITE_ONCE(*X, b);
> +
> + CPU 는 다음의 메모리 오퍼레이션 배열만을 메모리에 요청할 것입니다:

배열? 너무 뜬금없는 단어네요..

-> 해당 CPU는 오직 다음 순서대로 메모리 오퍼레이션을 수행할 것입니다.

> +
> + a = LOAD *X, STORE *X = b
> +
> + 그리고 다음에 대해서는:
> +
> + WRITE_ONCE(*X, c); d = READ_ONCE(*X);
> +
> + CPU 는 오로지 다음의 명령만을 냅니다:

(...) 오로지 아래 순서로 수행합니다.

> +
> + STORE *X = c, d = LOAD *X
> +
> + (로드와 스토어는 겹치는 메모리 영역을 타겟으로 할 때에 겹쳐집니다).

직역보다는 의역을 사용해 주세요..

(로드와 스토어가 수행하고자 하는 메모리 영역이 겹치는 경우, 로드와 스토어가
겹친다고 말합니다.)

---

I think there are still many things literally translated. It makes it much
harder to read.

I think it's not the version with which I can add opinions line by line.
Please review all sentences line by line carefully by yourself and make it
more readable.

I hope you don't hurry and spend more time to make it done. I believe you
agree with it.

Thank you,
Byungchul

\
 
 \ /
  Last update: 2016-07-07 14:41    [W:0.222 / U:0.148 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site