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

역사적으로 모든 컴퓨터 프로그램은 완전히 순차적인 방식으로 작성되었습니다. 이것은 읽고, 쓰고, 이해하기 쉽습니다. 또한 컴퓨터가 실행하기 쉽고 비교적 간단한 하드웨어가 필요합니다. 이 설계 패러다임에서 시스템 성능을 높이는 유일한 두 가지 방법은 보다 효율적인 코드를 작성하고 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

Apple Watch를 하드 리셋하는 방법

Apple Watch를 하드 리셋하는 방법

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

Galaxy Watch에서 항상 디스플레이가 작동하지 않는 문제 수정

Galaxy Watch에서 항상 디스플레이가 작동하지 않는 문제 수정

Samsung Galaxy Watch에서 Always on Display(AOD)가 작동하지 않을 때 해결하는 방법을 알아보세요. 절전 모드 비활성화, 앱 데이터 지우기, Wearable 앱 재설치 등 7가지 효과적인 해결책을 제공합니다.

링크드인: 다른 사람들이 당신이 그들의 프로필을 본 것을 알지 못하게 하는 방법

링크드인: 다른 사람들이 당신이 그들의 프로필을 본 것을 알지 못하게 하는 방법

LinkedIn에서 다른 사람들이 당신이 그들의 프로필을 본 것을 알지 못하게 하는 방법을 알아보세요. 비공개 모드 설정, 프로필 조회 기록 확인, 추가 필터 사용법 등을 포함한 완벽 가이드.

Chromebook에서 이모티콘을 얻는 방법: 알아야 할 3가지 최고의 방법

Chromebook에서 이모티콘을 얻는 방법: 알아야 할 3가지 최고의 방법

세 가지 최고의 방법으로 Chromebook에서 그림 이모티콘을 얻고 일상적인 대화를 재미있고 흥미롭게 만드는 방법을 알아보세요.

서버 팜이란 무엇입니까?

서버 팜이란 무엇입니까?

서버 팜은 데이터 센터에서 고성능 서버들이 모여 대규모 작업을 처리하는 시스템입니다. 효율적이고 경제적인 처리를 제공합니다.

컴퓨터에 물 손상이 있는지 확인하는 방법

컴퓨터에 물 손상이 있는지 확인하는 방법

물 손상은 하드웨어를 심각하게 부식시킬 수 있으며 컴퓨터 수리가 항상 가능한 것은 아닙니다. 예방은 항상 치료보다 낫습니다.

수정: Chromebook이 인쇄 미리보기를 로드하지 않음

수정: Chromebook이 인쇄 미리보기를 로드하지 않음

크롬북에서 인쇄 미리보기를 로드할 수 없는 경우 해결 방법을 제시합니다. 각 단계별로 간단하게 따라 해보세요.

Galaxy S20에서 무작위 재부팅을 중지하는 방법

Galaxy S20에서 무작위 재부팅을 중지하는 방법

Galaxy S20의 무작위 재부팅 문제를 해결하는 방법을 알아보세요. 스마트폰을 최대한 활용하세요.

Spotify 노래가 차지하는 공간 확인

Spotify 노래가 차지하는 공간 확인

Spotify Premium을 사용하면 사용자가 노래를 다운로드할 수 있으므로 네트워크에 연결되어 있지 않아도 들을 수 있습니다. 공간 최적화 방법도 알아보세요.

YouTube 동영상을 VLC 플레이어로 스트리밍하는 방법

YouTube 동영상을 VLC 플레이어로 스트리밍하는 방법

VLC Media Player는 오픈 소스이며 모든 플랫폼에서 사용 가능한 무료 미디어 플레이어입니다. 지금 바로 유튜브 동영상을 VLC에서 스트리밍하는 방법을 알아보세요.