inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Nhà phát triển phỏng vấn chính để chuẩn bị cho kỳ thi vừa qua [Chinh phục hoàn toàn CS]

Câu hỏi: Làm cách nào để giải quyết vấn đề đồng bộ hóa nhiều tiến trình/luồng? (1 câu hỏi khác) [Mutex & Semaphore]

동기화 문제

500

dduckmane

65 câu hỏi đã được viết

1

여기서 강사님이

 

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

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

 

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

Câu trả lời 2

0

dduckmane

감사합니다!

0

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

 

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

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

노션 접근이 안됩니다 ㅠㅠ

0

112

2

노션 공유 부탁드립니다.

0

54

2

노션 공유가 안됩니다!

0

148

2

프로세스가 많아질수록 segment table도 많아지는 건가요?

1

65

2

노션 공유가 사라졌습니다.

0

160

2

post 요청

0

50

1

http

0

58

1

mutex, semaphore와 deadllock

0

94

3

실행중인 프로세스는 메모리를 연속적으로? 아니면 불연속적으로 사용하나요?

0

70

1

노션 공유 요청 드립니다.

0

121

1

노션 공유 요청드립니다.

0

82

1

Dynamic Array와 Linked List의 시간복잡도에 대해서..

0

111

1

노션

0

106

1

질문이있습니다 선생님!

0

105

1

질문이있습니다 선생님!

0

95

1

질문이있습니다 선생님!

0

87

1

질문이있습니다 선생님!

0

160

2

질문이있습니다 선생님!

0

147

2

질문이 있습니다 선생님!

1

195

2

질문이 있습니다 선생님!

0

118

1

질문이있습니다 선생님!

0

80

1

질문이 있습니다 선생님!

0

102

1

질문이 있습니다 선생님!

0

84

1

물리적 메모리에 연속적으로 저장하지 않는 이유

0

125

1