안녕하세요.
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의 기술자가 될 수 있습니다 … <
다음주 봐~