230309(목) 모각코 제1회 운영체제 기미상궁
장수미2023. 3. 10. 01:14안녕하세요.
크롬으로 티스토리 접속이 안돼서
1시간동안 머리 싸매다가
사파리로 들어온
「DB술사」 입니다.
진심... 왜 접속이 안되는 거?...
4슈카월드 시간을 들였지만 해결못함
ㅠㅠ
저는 데이타-베이스술사지만
혁만 교수님께서
오늘까지의 내용은 잊어도 된다.
라고 하셨기에
운영체제 복습해볼게요.
사실 1주차꺼 안듣고
뻐팅기다가
2주차 시작부터 퀴즈 세개 올라온거 보고
급하게 공부함ㅎㅎ
2주차부터 안밀릴겁니다~♥
저는 사실 2021학년도 1학기에
1주차 영상을 이미 다 봤거든요.
자꾸 재수강이냐고 묻는데
화나게 하지마세요.
참고로 아직 1주차 수업 밖에 안들어서
용어나 내용이 틀릴 수도 있다는 점 양해 부탁드려요...
1. CPU 가상화
하나하나... 설명하긴 그렇고
키보드 입력으로 받은 string을 1초 간격으로 무한 출력하는 코드입니다.
컴파일 후 실행하니
A가 1초마다 잘 출력되는 모습입니다.
^C로 강제종료하니 멈췄네요
앗 여러개를 동시에 실행한다면?
(&은 백그라운드에서 실행하는겁니다.
순차적 실행은 ; 세미콜론 입니다.)
4개의 프로세스가 생성되고
번갈아가며 출력되네요.
CPU는 돌리려는 프로세스에 비해 항상 부족합니다.
윈도우컴켜서 아무 프로그램도 안켜도
프로세스 확인해보면 30개 돌아가고 있죠?
CPU는 많아봐야 2개
부자면 4개
대부분 1개입니다.
적은 수의 CPU를 수많은 프로세스 나눠쓰는거예요.
프로세스는 그 사실을 모른다고 하네요.
어리버리한 것이 나처럼 귀엽다.
라고 할 수 있습니다.
결론
CPU가 많이 있는 것 마냥 쓸 수 있게함 = CPU의 가상화
2. Virtual memory 메모리 가상화
int 사이즈만큼 공간이 생겼네요.
그리고 p는 int를 가지는
해당 주소를 저장합니다.
괄호 안에 pid(=프로세스 식별 번호)를 출력하고
p의 값(int)을 출력하겠다고 합니다.
*p = 0 이었는데 루프를 돌며 +1...
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 -> 연산하고
Store registerA 100 -> 갖다놓기
입니다.
atomic하지 못하다는 말입니다.
예?
명령어가 '쪼개진다'는 말입니다.
이게 왜 문젠데요?
두 쓰레드를 a,b라 하고
1로 초기화된 변수에
1을 더하는 연산을 수행한다고 해봅시다.
a쓰레드가 변수를 가져와서 +1까지밖에 못했습니다.
아직 못갖다놓았어요
그러면 변수는 여전히 값이 1이겠죠?
근데 b쓰레드가 변수에 접근을 해서 +1을 하면
1+1
2입니다.
이제 연산이 끝났으니 2라는 값을 변수에 갖다 놓으면
변수는 이제서야 1에서 2가되고
2를 갖다놓은데다가 다시 2을 갖다 놓은 셈...
그렇지 않을수도 있지만 그럴수도 있다.
비결정적이군요.
그림 가져오기 싫어서 줄글로 설명했는데 귀찮네요...
결론
병행성 해결을 위해서는
operation을 atomic하게 할 방법을 찾아야됩니다.
경쟁조건을 제거해야 된다고도 합니다.
너무 열심히 썼네요. 나자신 칭찬해.
DB술사가 아니라
OS술사가 될지도 데헷...<<퍽
다음주에 봐요~
'장수미' 카테고리의 다른 글
230406(목) 모각코 제5회 디비술사의 디비디비딥 (2) | 2023.04.06 |
---|---|
230330(목) 모각코 제4회 DB술사의 OS 숏퀴즈 점수 공개 (2) | 2023.03.31 |
[번외] 육회비빔밥, 그 깊은 감동에 대하여 (feat. 과사의 축복) (15) | 2023.03.29 |
230323(목) 모각코 제3회 DB술사의 진지한 DB 리뷰 (9) | 2023.03.22 |
230316(목) 모각코 제2회 DB술사의 위기.. 그리고 휴업공지💕 (4) | 2023.03.14 |