강의

멘토링

커뮤니티

Inflearn コミュニティ Q&A

kms1997199377 のプロフィール画像
kms1997199377

投稿した質問数

記出に備える開発者専攻面接 [CS完全征服]

Q. multi process/thread の同期問題をどのように解決しますか? (他1問題)[Mutex& Semaphore]

동기화 문제

作成

·

485

1

여기서 강사님이

 

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

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

 

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

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

면접운영체제운영체제기술면접기술면접면접

回答 2

0

dduckmane님의 프로필 이미지
dduckmane
質問者

감사합니다!

0

nossi님의 프로필 이미지
nossi
インストラクター

안녕하세요 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)라고 하는 곳에 저장을 하는데, 거의 동일하다고 보면 돼요

 

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

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

kms1997199377 のプロフィール画像
kms1997199377

投稿した質問数

質問する