230309(목) 모잠코 제1회 오퍼레이팅 시스템 기미상궁

  • by


안녕하세요.
Chrome에서 티 스토리에 액세스할 수 없음

한 시간 동안 머리를 감싸

사파리에 들어갔다.

DB술사입니다.


슈카 월드는 매우 흥미 롭습니다.

진심… 왜 연결할 수 없어?

4 슈카 월드 시간을 걸었지만 해결되지 않음

ㅠㅠ

저는 데이타베이스 술사이지만

혁만 교수

오늘까지의 내용은 잊을 수 있다.

라고 말했기 때문에

운영 체제를 복습합시다.

실은 1주일은 들리지 않습니다.

커팅을 기다리고

2주째 시작부터 퀴즈가 3개 올라가고 있습니다.

긴급 공부 ㅎㅎ

2주차부터 안심합니다~♥

나는 실제로 2021년 1학기에

1주차 영상을 이미 보았습니다.

자주 다시 수강합니까?

화내지 마라.

그건 그렇고, 아직 1 주째 수업 만 들어왔기 때문에

용어나 내용이 잘못되었을 수 있습니다.

1. CPU 가상화


하나하나… 설명하고 있습니다.

키보드 입력으로 받은 문자열을 1초 간격으로 무한히 출력하는 코드입니다.


컴파일 후 실행합니다.

A가 1초마다 잘 출력되는 모습입니다.

^C로 강제 종료하므로 정지했습니다.


어 복수를 동시에 실행한다면?

(&는 백그라운드에서 실행 중입니다.

순차 실행은. 세미콜론입니다.

)

네 가지 프로세스가 만들어지고,

번갈아 출력됩니다.

CPU는 반환하는 프로세스에 비해 항상 부족합니다.

WindowsCom을 켜고 프로그램을 끄기

프로세스 확인해 보면 30개 돌아가고 있지요?

CPU가 많이 보지 않으면 두

부자라면 네

거의 하나입니다.

소수의 CPU를 수많은 프로세스로 나눕니다.

프로세스는 그 사실을 모른다고 한다.

어리석은 것이 나처럼 귀엽다.

라고 말할 수 있습니다.

결론

CPU가 많은 것만 쓸 수 있다 = CPU 가상화

2. Virtual memory 메모리 가상화


int 사이즈만큼 스페이스가 생겼어요.

그리고 p는 int

해당 주소를 저장합니다.

괄호 안에 pid(=프로세스 식별 번호)를 출력하고,

p의 값 (int)을 출력한다고 가정합니다.

* p = 0 이었지만 루프를 돌려 +1 …

초당

1

2

3

4

가 출력됩니다.


호호 정답

예 정답입니다.


프로세스 2개를 돌려도 동일하네요!

그것은 다른 과정입니다.

두 프로세스가 쓰는 주소는 0x200000과 동일합니까?

협력하면서 +1하는 대신,

독립적으로 작동합니까?

프로세스가 사용하는 메모리는

물리적으로 존재하는 메모리가 아니라

가상화된 (상상 속…) 메모리라는 것을 알 수 있습니다.

결론

메모리 가상화

메모리는 각 프로세스마다 “독립된 공간”을 제공합니다.

(그리고 이 사실을 프로세스를 모르는 것 같다…)

물리적 한계를 넘어 메모리가 무한대처럼 보입니다.

그 옛날 컴퓨터 장애인은 정말 훌륭합니다.

부족하기 때문에 척하는 척하는 법을 찾았습니다.

내 두뇌에도 많은 척하는 방법이 없습니까?

3. Concurrency 동시성

그 전에

동시성은 무엇입니까?

일을 병행하고 있습니까?뭐야

하나의 태스크를 실행하기 위해 실행되는 여러 상세 태스크를 병렬로 실행할 수 있는 속성.

글쎄, 이것만 보면 느낌이 전혀 없습니다 …

이해를 돕기 위해 조금 추가하면

‘한 줄’처럼 보이는 동작

기계어로 조사하면

「복수행」의 동작이기 때문입니다.

무슨 말씀이세요?

보면 알 수 있습니다.


사실은 여기에서 말해야 할 일이 너무 많지만,

번거롭기 때문에 코어 만 보면

counter++

input 받은 분

루프를 돌려 실행합니다.

마지막으로 count를 출력합니다!

그리고

그 논리로 돌아가,

counter 변수를 공용으로 사용

스레드가 2개

엔? 갑자기 스레드는 무엇입니까 ㅠㅠ

프로세스보다 작은 실행 흐름의 최소 단위

충분히 알고

오, 지금 논리에서

뒤로 프로그램

두 개의 개방인가~라고 생각합시다.


그럼 1000입력하면~~

1000

스레드가 힘을 합쳐

함께 두 번 추가하기 때문에

2000이 출력됩니까?


상처

아니…당신이 돌 때마다 따로 나온다…

정말 무슨 일이 일어나는지

무너진 하늘을 개수하고 싶다

간단히 설명하면

counter++라는 명령을 나누면

Load registerA 100 -> 가져오기

ADD registerA#1 -> 연산

상점 registerA 100 -> 배치

입니다.

atomic 할 수 없다는 것입니다.

예?

명령이 “깨진다”라는 말입니다.

이것은 왜?

두 개의 스레드를 a, b로 설정합니다.

1로 초기화된 변수

1을 더하는 연산을 실행한다고 가정합시다.

a 스레드가 변수를 가져오고 +1까지만 허용했습니다.

아직 가지고 있지 않습니다.

그러면 변수의 값은 여전히 ​​1입니다.

그러나 b 스레드가 변수에 액세스하여 +1을하면,

1+1

2입니다.

이제 작업이 끝났으므로 2라는 값을 변수에 넣으면

변수는 지금 1에서 2까지

2를 놓은 후 다시 2를 넣은 것입니다 …

그렇지 않을 수도 있지만, 그것도 있습니다.

비결정적이네요.

그림을 가져오고 싶지 않기 때문에 줄로 설명했지만 귀찮습니다 …

결론

동시성 해결을 위해

operation을 atomic으로 만드는 방법을 찾아야합니다.

경쟁 조건을 없애야 한다고도 합니다.

매우 노력했습니다.

나 자신 칭찬하십시오.

DB주사가 아닌

OS의 기술자가 될 수 있습니다 … <


다음주 봐~