인프런 커뮤니티 질문&답변

dduckmane님의 프로필 이미지
dduckmane

작성한 질문수

기출로 대비하는 개발자 전공면접 [CS 완전정복]

Q. multi process/thread의 동기화 문제를 어떻게 해결하나요? (외 1문제) [Mutex & Semaphore]

동기화 문제

작성

·

365

1

여기서 강사님이

 

count 를 cpu 로 읽어와서 연산을 하고

count 를 저장해야하지만 저장하지 못하고 context switching 이 일어날 때 동기화문제가 생긴다고 설명을 해주셨습니다.

 

  • 어디서 cpu 로 읽어오는 건지 어디다가 저장해야 하는 데 저장하지 못한건 지가 궁금합니다.

  • 그리고 멀티쓰레드 간에 context switching 이 일어 날 때도 멀티프로세스 환경과 동일하게 커널에 있는 pcb 를 의존하는건가요??

답변 2

0

dduckmane님의 프로필 이미지
dduckmane
질문자

감사합니다!

0

개발남노씨님의 프로필 이미지
개발남노씨
지식공유자

안녕하세요 dduckmane님.

 

우리가 만약 Count++ 이란 코드를 작성하면 컴퓨터는 컴파일을 통해서 어셈블리 언어로 (더 자세히 보면 기계어로) 변환을 해줍니다.

count++ 는

 

세 가지 단계로 나뉘어요.

  1. load count

  2. count = count + 1

  3. save count

이 정보가 메모리의 code영역에 쓰여져 있는거고, CPU는 pc register가 가리키는 순서대로 code영역의 어셈블리 코드를 읽어옵니다.

그래서 CPU는 code영역에 있는 위의 세 개의 코드 중에서 1, 2번 을 CPU가 실행을 한건데, 아직 저장은 안했죠. 저장을 하기전에 context switch가 되어서 저장을 못한채로 턴이 넘어가게 되는거에요.

 

그럼 load count, save count라고 하는데, 이건 도대체 어디에 저장하는 걸까요? count에 해당하는 register에서 값을 가져오고 저장하는 겁니다. 이건 컴퓨터 구조와 연관되어 있는 내용이라서 그렇구나~ 하고 넘어가도 될정도의 깊이인 것 같습니다~.~

 

  • 그리고 멀티쓰레드 간에 context switching 이 일어 날 때도 멀티프로세스 환경과 동일하게 커널에 있는 pcb 를 의존하는건가요??

맞습니다. 조금 자세히 말씀드리면 쓰레드는 PCB말고 TCB(Thread Control Block)라고 하는 곳에 저장을 하는데, 거의 동일하다고 보면 돼요

 

혹시 질문에 답이 됐을까요??

해소되지 않은 질문이 있거나 더 궁금한 점 있으시면 질문해주세요 :)

dduckmane님의 프로필 이미지
dduckmane

작성한 질문수

질문하기