메모리 잠금이란 무엇입니까?

역사적으로 모든 컴퓨터 프로그램은 완전히 순차적인 방식으로 작성되었습니다. 이것은 읽고, 쓰고, 이해하기 쉽습니다. 또한 컴퓨터가 실행하기 쉽고 비교적 간단한 하드웨어가 필요합니다. 이 설계 패러다임에서 시스템 성능을 높이는 유일한 두 가지 방법은 보다 효율적인 코드를 작성하고 CPU 속도를 높이는 것입니다. 코드 효율성을 높이는 것이 가능할 수 있지만 일반적으로 결과가 제한된 복잡한 프로세스입니다.

수십 년 동안 새롭고 더 효율적인 CPU를 기다리면 성능이 저하될 수 있습니다. 무어의 법칙에 설명된 대로 CPU는 2~3년마다 대략 두 배의 성능을 발휘합니다. 불행하게도 이러한 성능 향상의 대부분은 점점 더 작아지는 제조 노드를 사용함으로써 이루어졌습니다. 현대 기술은 나노미터 규모에서 작동하는 물질적 어려움으로 인해 역사적 속도로 노드 크기를 줄이는 데 어려움을 겪고 있습니다.

이 문제를 해결하기 위해 최신 CPU 설계자는 CPU에 여러 프로세서 코어를 추가하기로 결정했습니다. 각 프로세서 코어는 서로 다른 작업에서 독립적으로 작동할 수 있습니다. 동일한 문제를 결합할 수는 없지만 두 가지 문제를 동시에 해결할 수 있습니다. 이 근본적인 아키텍처 변경은 많은 추가 성능을 제공하지만 개별 프로세스에 직접적인 이점은 없지만 프로세서 시간에 대한 경합을 줄입니다.

멀티 코어 CPU를 활용하려면 멀티 스레드 방식으로 코드를 작성해야 합니다. 그런 다음 각 스레드를 동시에 실행하여 사용 가능한 스레드 및 CPU 코어 수에 따라 성능 이점을 확장할 수 있습니다. 그러나 이렇게 하면 "경쟁 조건"이라는 새로운 문제에 직면하게 됩니다.

참고: 일부 작업은 다중 스레드가 될 수 없지만 다른 작업은 대규모 다중 스레드가 될 수 있습니다. 가능한 성능 이점은 수행 중인 작업에 따라 다릅니다.

경쟁 조건

다중 스레드 소프트웨어는 다중 코어를 활용할 수 있습니다. 미숙한 프로그래머를 함정에 빠뜨릴 위험이 도사리고 있습니다. 서로 다른 두 스레드가 동일한 메모리 비트와 상호 작용할 때 경합 상태가 발생할 수 있습니다.

간단한 예는 변수를 동시에 확인하고 증가시키려는 두 개의 스레드일 수 있습니다. a=0 이라고 가정해 보겠습니다 . 그런 다음 두 개의 서로 다른 스레드가 기능을 수행하고 어느 시점에서 a 를 확인하고 1씩 증가시킵니다. 일반적으로 두 개의 스레드가 1에서 0을 더한 결과는 2가 될 것으로 예상합니다. 대부분의 경우 이렇게 해야 합니다. 두 스레드가 정확한 시간에 특정 기능을 수행하면 다른 결과를 얻을 수 있습니다.

이 경우 첫 번째 스레드는 a 값을 읽습니다 . 첫 번째 스레드가 a 의 값을 증가시키기 전에 두 번째 스레드가 그것을 읽습니다. 이제 첫 번째 스레드는 1에 0을 더하지만 두 번째 스레드는 이미 값이 0이라고 믿고 1에 0을 더합니다. 결과적으로 a 의 최종 값은 2가 아니라 1입니다.

최악의 시나리오를 향한 경주

위의 예가 특별히 나쁘게 들리지 않을 수도 있지만 극적인 효과가 있을 수 있습니다. a 의 값이 기계의 작동 모드를 선택하면 어떻게 될까요? 해당 기계의 특정 작동 모드가 위험하거나 심지어 생명을 위협할 수 있는 경우에는 어떻게 합니까?

경쟁 조건도 그렇게 단순할 필요는 없습니다. 예를 들어, 한 스레드가 메모리 섹션을 읽는 동시에 다른 스레드가 메모리 섹션에 쓰는 것이 가능할 수 있습니다. 이 경우 읽기 스레드는 이전과 이후의 데이터가 이상하게 혼합될 수 있습니다. 수표가 단순한 참/거짓 수표라고 가정해 봅시다.

읽기 시작 시 변수가 참이라고 했지만 단어 거짓으로 덮어쓰는 과정에 있었다면 읽기 작업의 결과는 "trlse"와 같을 수 있습니다. 이것은 "참" 또는 "거짓"이 아닙니다. 바이너리 선택에서 두 가지 옵션 중 하나가 아니면 응용 프로그램 충돌이 거의 확실하게 발생합니다. 이 메모리 손상은 서비스 거부 및 권한 에스컬레이션과 같은 많은 보안 문제로 이어질 수 있습니다.

레이스 잠그기

서로 다른 스레드 간에 공유되는 프로그램의 메모리 비트를 아는 것은 경합 상태를 방지하는 데 필수적입니다. 단일 스레드에서만 변수를 제어하고 액세스할 수 있는 경우 아무것도 수행할 필요가 없습니다. 둘 이상의 스레드가 변수에 액세스할 수 있는 경우 해당 메모리 조각에 대한 모든 작업이 서로 독립적으로 완료되도록 해야 합니다.

이 독립성은 잠금 덕분에 달성됩니다. 프로그램 코드에서 공유 메모리 부분에서 작동하는 함수를 작성할 때 잠금을 설정해야 합니다. 이 잠금은 잠금이 해제될 때까지 다른 스레드가 해당 메모리에 액세스하지 못하도록 차단합니다.

자물쇠는 가장 우아한 솔루션이 아닙니다. 우선 메모리 오버헤드가 있습니다. 또한 잠금이 해제되기를 기다리면서 스레드를 강제로 정지시킬 수도 있습니다. 상황에 따라 매우 오랫동안 잠금이 해제되지 않거나 전혀 해제되지 않을 수 있습니다. 최악의 경우 잠금 해제는 다른 차단된 스레드에서 발생하는 문제에 따라 교착 상태가 발생할 수 있습니다.

잠금 사용을 최적화하는 것이 중요합니다. 잠금의 세분화 정도를 제어할 수 있습니다. 예를 들어 테이블의 데이터를 편집하는 경우 전체 테이블을 잠그거나 편집된 행만 잠글 수 있습니다. 전체 테이블을 잠그는 것은 대략적인 세분성 잠금입니다. 너무 많은 잠금을 구현하여 오버헤드를 최소화하지만 다른 스레드가 잠금에 의해 차단될 가능성이 높아집니다. 행만 잠그면 세밀한 잠금이 됩니다. 이는 다른 스레드를 방해할 가능성이 훨씬 적지만 잠금을 해제해야 하므로 총 오버헤드가 증가합니다.

결론

메모리 잠금은 다중 스레드 환경에서 메모리 내 작업의 원자성을 보장하는 데 사용되는 코드 도구입니다. 작동하기 전에 메모리를 잠그면 경쟁 조건으로 인해 예기치 않은 동작이 발생하지 않도록 할 수 있습니다. 메모리 잠금은 메모리 오버헤드와 함께 제공되지만 차단을 유발할 수도 있습니다.

차단은 다른 스레드가 잠긴 메모리에서 작업을 시도하는 곳입니다. 스레드는 거기에 있고 잠금이 해제될 때까지 차단됩니다. 잠금을 해제하는 데 다른 스레드가 작업을 수행해야 하는 경우 문제가 발생할 수 있습니다. 이를 차단하는 잠금을 해제하기 위한 전제 조건을 완료하기 전에 차단될 수 있기 때문입니다. 비차단 코드를 작성하여 메모리 잠금을 방지할 수 있습니다. 그러나 이렇게 하면 잠금을 사용하는 것보다 복잡하고 성능이 떨어질 수 있습니다. 아래에 의견을 남기는 것을 잊지 마십시오.



Leave a Comment

Powerbeats Pro가 케이스에서 충전되지 않을 때 해야 할 일

Powerbeats Pro가 케이스에서 충전되지 않을 때 해야 할 일

Powerbeats Pro가 충전되지 않으면 다른 전원 소스를 사용하고 귀마개를 청소하세요. 귀마개를 충전하는 동안 케이스를 열어 두세요.

3D 프린팅 기본: 필수 유지보수 체크리스트

3D 프린팅 기본: 필수 유지보수 체크리스트

장비를 좋은 상태로 유지하는 것은 필수입니다. 다음은 3D 프린터를 최상의 상태로 유지하기 위한 유용한 팁입니다.

Canon Pixma MG5220: 잉크 없이 스캔하기

Canon Pixma MG5220: 잉크 없이 스캔하기

Canon Pixma MG5220에서 잉크가 없을 때 스캔을 활성화하는 방법입니다.

노트북 과열의 5가지 이유

노트북 과열의 5가지 이유

노트북이 과열되는 몇 가지 가능한 이유와 이 문제를 피하고 장치를 시원하게 유지하는 팁과 요령을 알아보세요.

데스크탑 및 노트북 PC에 SSD 설치하는 방법

데스크탑 및 노트북 PC에 SSD 설치하는 방법

PC의 내부 저장 공간을 업그레이드하기 위해 SSD를 구입했지만 설치 방법을 모르겠습니까? 지금 이 기사를 읽어보세요!

GeForce Now 오류 코드 0xC272008F 수정 방법

GeForce Now 오류 코드 0xC272008F 수정 방법

게임의 밤을 준비하고 있으며, "Star Wars Outlaws"를 GeForce Now 스트리밍 서비스에서 플레이하려고 합니다. Ubisoft 게임을 다시 시작할 수 있도록 GeForce Now 오류 코드 0xC272008F를 수정하는 방법을 알아보세요.

3D 프린팅 기초: 3D 프린터 유지보수 팁

3D 프린팅 기초: 3D 프린터 유지보수 팁

3D 프린터를 효과적으로 유지하는 것은 최상의 결과를 얻는 데 매우 중요합니다. 기억해야 할 중요한 팁을 소개합니다.

프린터의 IP 주소 찾는 방법

프린터의 IP 주소 찾는 방법

프린터의 IP 주소를 찾는 데 어려움이 있습니까? 우리는 그것을 찾는 방법을 보여줄 것입니다.

Samsung 휴대폰에서 AirPods 사용하기

Samsung 휴대폰에서 AirPods 사용하기

Samsung 휴대폰에 AirPods 구입 여부를 고민하고 있다면, 이 가이드가 도움이 될 것입니다. 가장 간단한 질문은 호환성 여부입니다.

Apple Watch를 하드 리셋하는 방법

Apple Watch를 하드 리셋하는 방법

Apple Watch 하드 리셋 및 공장 초기화 방법을 단계별로 설명합니다. 소프트 리셋부터 하드 리셋까지, 모든 모델에 대한 가이드를 제공합니다.