GithubHelp home page GithubHelp logo

kangtegong / self-learning-cs Goto Github PK

View Code? Open in Web Editor NEW
382.0 6.0 67.0 4.41 MB

『혼자 공부하는 컴퓨터구조 & 운영체제』 (한빛미디어) 심화자료

Home Page: https://www.yes24.com/Product/Goods/111378840

C++ 0.50% HTML 99.50%
computer-architecture computer-engineering computer-science kernel operating-system

self-learning-cs's Introduction

self-learning-cs's People

Contributors

kangtegong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

self-learning-cs's Issues

하드웨어적 스레드와 소프트웨어적 스레드 관련 질문

안녕하세요 선생님,

집필하신 책 참고하면서 멀티스레드 쪽 공부를 하고 있는 중에 궁금한 점이 생겨서 질문드립니다!

기초 다지는데 도움이 정말 많이 됩니다.
좋은 책 만들어주셔서 감사합니다 ㅎㅎ


질문

  • 1코어 2스레드 CPU를 사용한다고 가정.
  1. 특정 프로그램이 스레드를 3개 사용하도록 짜여져 있다면, 소프트웨어적 스레드가 3개다! 라고 이해하면 될까요?
  2. 위의 프로그램을 실행한다면, CPU 입장에서 하드웨어적 스레드는 2개이므로 프로그램에서 요구하는 소프트웨어 스레드보다 1개가 부족하니까, 부족한 스레드에 대해서 context switching이 일어나면서 프로그램이 실행되는게 맞을까요?

주소 지정 방식에 관련하여 질문이 있습니다.

  1. 즉시 주소 지정 방식은 오퍼랜드에 연산에 사용할 데이터가 들어있는 방식이기 때문에 연산에 사용할 데이터를 메모리나 레지스터로부터 찾는 과정이 없어서 다른 주소 지정 방식들보다 빠르다고 되어있습니다. 그런데, 데이터를 사용한다는 것은 결국 어딘가에 저장은 되어있다는 뜻일텐데, 메모리나 레지스터에 데이터가 없다면 어디에 있다는 뜻인가요?? CPU 안의 ALU 에 있나요...?

  2. 직접 주소 지정 방식과 간접 주소 지정 방식에 대한 차이점은 알겠는데, 이점이 크게 와닿지가 않습니다.직접 주소 지정 방식은 유효 주소를 표현 할 수 있는 범위가 연산 코드의 비트 수만큼 줄기 때문에 제한이 생길 수 있다고 되어있습니다. 그러나 간접 주소 지정방식 또한 유효 주소의 주소도 연산 코드의 비트 수만큼 줄지 않나요?? 결국 유효주소나 유효주소의 주소나 똑같은 메모리 주소일텐데 굳이 유효주소를 더 길게 써야 할 상황이 있나요??더더군다나 간접 주소 지정 방식은 두 번의 메모리 접근이 필요해서 더 느릴텐데 왜 이 방식을 사용하는지 이유를 모르겠습니다.

인터럽트 서비스 루틴에 관하여 질문이 있습니다.(대략 135p 전후)

  1. 135p 에 'CPU 는 하드웨어 인터럽트 요청을 보낸 대상으로부터 데이터 버스를 통해 인터럽트 벡터를 전달받습니다.' 라고 적혀있는데, 그 전 페이지에 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있기 때문에 CPU 는 인터럽트 벡터를 통해 특정 인터럽트 서비스 루틴을 처음부터 실행할 수 있습니다. 라고 적혀있습니다. 그렇다면, 인터럽트 벡터는 주소버스를 타지 않고 데이터 버스를 타는 이유는 무엇인가요?? 인터럽트 벡터에 담겨있는 시작 주소를 전달 받아서 프로그램 카운터에 넣은 뒤 실행해야 할 것 같은데..제가 생각한 것과 동작이 다르거나 주소 외에 데이터 정보가 추가로 들어있는 건가요??

  2. 되게 멍청한 질문같긴 한데... 함수가 순차적으로 실행되면 메모리에서 스택영역(↔ 힙 영역)에 스택 프레임이 따로 쌓이잖아요..마찬가지로 인터럽트 서비스 루틴도 스택에 저장될 때, 스택 프레임이 쌓이는 건가요? 만약 맞다면 인터럽트 서비스 루틴의 스택 프레임도 함수의 스택프레임과 구조가 똑같나요??

  3. 2번과 비슷한 질문이지만 함수가 실행 될 때, 인터럽트 서비스 루틴은 함수와 비슷하게 동작할까요?? C언어에서 함수가 실행 될 때 CALL 과 RETURN 명령어가 실행된다는 것은 이해를 했는데.. 비슷한 맥락으로(스택에 저장된다는 점) 인터럽트 서비스 루틴이 발생했을 때도 CALL 과 RETURN 명령어가 실행 되는지 궁금합니다.

  4. 만약 둘 다 명령어가 실행된다면.. 큰 맥락으로 봤을 때, CALL(호출) > JUMP(호출한 곳으로 점프) > RETURN(다시 돌아감) 순으로 실행되나요? C언어에서의 RETURN 은 보통 값을 반환한다는 뜻을 가지는데, 여기서도 값을 반환한다는 뜻을 가지나요? 아니면 다시 CALL 전의 주소로 돌아간다는 뜻을 가지나요?

  5. 둘을 비교하다보니까 궁금해진건데, 인터럽트 등등 처럼... 하나의 프로그램은 하나의 거대한 함수라고 볼 수 있을까요? 프로그램도 명령어와 데이터로 이루어져있고, 함수도 명령어와 데이터로 이루어져있잖아요. 특히 C언어에서 꼭 프로그램은 main 문이 존재하기도 하구요..

주기억장치와 보조기억장치 외국어 표기에 대한 궁금증

안녕하세요 책 38쪽을 읽다가 주기억장치와 보조기억장치 외국어 표기에 대해 궁금증이 생겨 질문 드립니다.
주기억장치는 'main memory', 보조기억장치는 'secondary storage'로 표기하신 것을 확인하였습니다.
주기억장치와 보조기억장치 둘 다 기억장치라는 말을 포함하고 있는데 왜 다르게 표기하신지 궁금합니다.

혼공 컴퓨터구조+운영체제

선생님 안녕하세요. 컴구조 및 운영체제 공부하고 있는 학생입니다. 선생님 교제를 읽다보니 조금 이해가 안되는 부분이 있어 질문을 하고 싶어 찾아왔습니다. 레지스터 파트 부분에서 프로그램 속 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장됩니다라는 이 문구에서헷갈리는데 실행 전후라는 이 말이 컴퓨터에 있는 모든 프로그램을 저장하고 있다는 내용인지 헷갈립니다. 제가 이 내용을 보고 든 생각은 현재 사용자가 개발하는 프로그램의 실행 전후를 레지스터에 저장한다 또는 실행된 프로그램을 레지스터로 끌고와 저장하고 수정한 내용도 레지스터에 저장된다. 또 궁금한점이 있는데 레지스터도 메모리처럼 컴퓨터가 꺼지면 초기화되는건가요?

안녕하세요!

안녕하세요! Chapter03| 03-2 명령어의 구조 파트의 간점주소지정방식에 관해 궁금한점이 있습니다. 직접주소지정방식에서 유효주소를 표현할 공간이 작아진다는 단점을 보완하기 위해 간접주소지정방식에서 유효주소의 주소를 사용한다고 하였는데 유효주소의 주소도 결국 메모리에서의 주소이고 유효주소 또한 메모리에서의 주소이라는점에서 차이가 없는것 아닌가요? 감사합니다!

p.182 Sdram 질문있습니다.

SDRAM 앞서 DRAM을 설명할 때 클럭신호에 대한 설명이 없었는데요.
SDRAM이 클럭신호와 동기화 되었다는 설명을 통해
DRAM은 클럭신호와 동기화되지 않은 장치라고 유추해볼 수 있을것 같습니다.

하지만, 컴퓨터 장치들은 클럭신호라는 박자에 맞춰서 일사분란하게 작동한다고 p.108에 설명해주셨던 개념과 혼동이 됩니다.

DRAM과 클럭신호간의 관계를 어떻게 정리할 수 있는지 궁금합니다.

p.132 인터럽트 요청 신호와 인터럽트 플래그에 관하여 질문이 있습니다.

안녕하세요 민철님!
어렵고 지루할 수 있는 내용들을 알기 쉽게 설명해주셔서 많은 도움이 됩니다.

책을 통해 공부하던 중, 두 가지 궁금증이 생겨 질문드립니다.

1. 인터럽트 요청 신호에 관한 질문

하드웨어 인터럽트 처리 과정에서
"CPU는 인출 사이클 실행 전에 항상 인터럽트 여부를 확인한다"고 설명해주셨는데,

이때 CPU가 인터럽트 요청 신호를 확인할 수 있도록
입출력 장치에서 CPU로 제어 버스를 통해서 인터럽트 요청 신호를 보내는 것이 맞나요?

2. 인터럽트 플래그에 관한 질문

인터럽트 신호가 도달했을 때
"인터럽트 플래그를 통해 받아들이는 여부를 결정한다"고 설명해주셨는데,

이때 CPU가 확인하는 인터럽트 플래그는
방금 보낸 인터럽트 요청 신호 안에 포함되어있는 내용인가요?
이전 명령어에 의해 생성된 플래그의 내용인가요?

둘 다 아니라면 어느 시점에 플래그 레지스터에 저장된 정보인가요?

클럭과 워드 등에 관하여 질문있습니다.(질문 3개)

  1. 클럭은 컴퓨터 부품의 박자같은거고, 워드는 CPU가 한번에 처리할 수 있는 데이터의 단위라고 나와있는데.. 1클럭당 최대 1워드씩 실행되는건가요??

  2. 1클럭 안에서도 여러 개의 명령어나 데이터도 실행될 수 있는건가요?? 한 개의 명령어나 데이터 이동도 여러 클럭이 걸릴 수 있다는 것은 알겠는데, 그 반대의 경우도 가능한 것인지 궁금합니다.

  3. 혹시 명령어의 길이는 CPU 의 1워드만큼씩 잘리나요??
    주소지정방식에서 간접주소지정 방식을 사용하는 이유에서 명령어의 길이가 제한되었을 때 데이터의 표현 길이가 제한되기 때문이라고 들었는데요. 특히 전의 질문드렸을 때 [큰 데이터의 경우 내부적으로는 한정된 크기의 단위로 잘려서 메모리에 저장됩니다. ] 라고 답변 주셨었습니다. 그래서 궁금해진 것인데, 그 잘리는 단위가 1워드 인지 궁금합니다.
    전에 관련이 없을 것 같았던 메모리의 포인터 변수의 크기도 CPU 1워드 값과 같다고 알게 되어서 혹시나해서 여쭤봅니다.(참고 사이트: http://www.tcpschool.com/c/c_pointer_intro)

C언어에서의 함수 return 명령어와 어셈블리어의 Return 은 다른 개념인가요??

같은 개념인지 아니면 C언어 등에서의 return 명령어가 어셈블리어 Return 명령어와 다른 명령어를 포함해서 만들어진 개념인지 궁금합니다.

함수가 종료되면 Return 명령어가 쓰인다는 점에서는 같고, C언어도 Return 명령어를 쓰면 함수를 종료 하고 다시 원래 있던 곳으로 돌아간다는 점에서 같은 거 같기도 같기도 합니다만...C언어에서 return 은 값을 반환하는 동작이 포함되어있잖아요.
반면 어셈블리어는 배워본 적은 없지만, 왠지 혼공컴운에서 RETURN 명령어 설명에 값 반환 얘기가 안쓰여있는거보니 함수 값 반환하는 명령어는 따로 있는거같아서요.

고립형 입출력(isolated I/O) 주소 공간 관련

안녕하세요
P243. 고립형 입출력 항목 주소 공간과 관련하여 질문 드립니다.

메모리 맵 입출력의 경우,
입출력장치 접근을 위한 주소공간을 메모리에 할당하여 하나의 주소공간으로 간주하는 것으로 이해하였습니다.
(메모리에 할당하니 당연히 메모리 공간이 축소된다는 흐름까지 이해)

고립형 입출력의 경우,
주소 공간을 분리한다고 하시며 예시에 들어 1024개(예시)의 주소 공간을 활용할 수 있다고 언급되었습니다.
이해가 되지 않는 점은 이 점입니다.
저기에 언급된 입출력장치의 주소공간은 어디에 위치하는지 궁금하여 질문 드립니다.
일단 주소를 알고 있다면, CPU는 '입출력장치 읽기/쓰기 선'을 통해 장치 컨트롤러에 접근하는 점은 이해되는데
1024개(예시)나 되는 입출력장치의 주소공간은 어디에 있고
CPU가 어떻게 읽고 입출력장치에 접근하는지 이해가 되지 않아 문의드립니다.
(입출력장치별로 '읽기/쓰기 선'을 가진다? 그래서 CPU가 입출력장치를 개별적으로 인식해서 처리한다?
쉬이 머릿속에 와닿지 않아 글을 남기게 되었습니다.)

번잡한 글 읽어 주셔서 감사합니다.

334쪽 CPU 집중 프로세스와 입출력 집중 프로세스 설명에 대한 질문입니다.

334쪽에 CPU 집중 프로세스의 우선순위가 높고 입출력 집중프로세스의 낮다고 되어있고
백그라운드 프로세스의 우선순위가 더 높고 대화형은 우선순위가 낮아도 무방하다 되어있습니다.

앞에 내용에서는 입출력 집중프로세스가 CPU 집중 프로세스보다 먼저 실행된다고 되어있고

인터넷 검색을 해봐도 우선순위가 입출력 집중 프로세스>CPU 집중 프로세스, 대화형 프로세스>백그라운드 프로세스로

되어있어서 (https://rlg1133.tistory.com/96)

뭐가 맞는 설명인지 궁금해서 질문드립니다.

책을 보다가.. 인터럽트 서비스 루틴과 함수에 관하여 궁금한 점이 있습니다.(질문 5개...)

  1. 135p 에 'CPU 는 하드웨어 인터럽트 요청을 보낸 대상으로부터 데이터 버스를 통해 인터럽트 벡터를 전달받습니다.' 라고 적혀있는데, 그 전 페이지에 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있기 때문에 CPU 는 인터럽트 벡터를 통해 특정 인터럽트 서비스 루틴을 처음부터 실행할 수 있습니다. 라고 적혀있습니다. 그렇다면, 인터럽트 벡터는 주소버스를 타지 않고 데이터 버스를 타는 이유는 무엇인가요?? 인터럽트 벡터에 담겨있는 시작 주소를 전달 받아서 프로그램 카운터에 넣은 뒤 실행해야 할 것 같은데..제가 생각한 것과 동작이 다르거나 주소 외에 데이터 정보가 추가로 들어있는 건가요??

  2. 되게 멍청한 질문같긴 한데... 함수가 순차적으로 실행되면 메모리에서 스택영역(↔ 힙 영역)에 스택 프레임이 따로 쌓이잖아요..마찬가지로 인터럽트 서비스 루틴도 스택에 저장될 때, 스택 프레임이 쌓이는 건가요? 만약 맞다면 인터럽트 서비스 루틴의 스택 프레임도 함수의 스택프레임과 구조가 똑같나요??

  3. 2번과 비슷한 질문이지만 함수가 실행 될 때, 인터럽트 서비스 루틴은 함수와 비슷하게 동작할까요?? C언어에서 함수가 실행 될 때 CALL 과 RETURN 명령어가 실행된다는 것은 이해를 했는데.. 비슷한 맥락으로(스택에 저장된다는 점) 인터럽트 서비스 루틴이 발생했을 때도 CALL 과 RETURN 명령어가 실행 되는지 궁금합니다.

  4. 만약 둘 다 명령어가 실행된다면.. 큰 맥락으로 봤을 때, CALL(호출) > JUMP(호출한 곳으로 점프) > RETURN(다시 돌아감) 순으로 실행되나요? C언어에서의 RETURN 은 보통 값을 반환한다는 뜻을 가지는데, 여기서도 값을 반환한다는 뜻을 가지나요? 아니면 다시 CALL 전의 주소로 돌아간다는 뜻을 가지나요?

  5. 둘을 비교하다보니까 궁금해진건데, 인터럽트 등등 처럼... 하나의 프로그램은 하나의 거대한 함수라고 볼 수 있을까요? 프로그램도 명령어와 데이터로 이루어져있고, 함수도 명령어와 데이터로 이루어져있잖아요. 특히 C언어에서 꼭 프로그램은 main 문이 존재하기도 하구요..

p459 그림 오타

파일 b의 두 번쨰 블록이 가리키는 다음 블록 주소는 19
그림 상에서는 18과 연결되어 있음
스크린샷 2023-02-15 오후 3 51 46

p58, 이진수의 음수표현 질문드립니다.

안녕하세요.
혼공컴운을 공부하던 중 궁금한 점이 있어 질문드립니다.

p58에서 0과 1만으로 음수를 표현해야하기 때문에 2의 보수를 구해 음수로 간주하는데, 결국 음수 양수는 플래그를 사용해 구분한다고 되어있습니다.

그럼 굳이 2의 보수를 쓰지 않고 플래그로만 구분하면 되지 않을까 의문이 듭니다.
예를 들어 -3은 그냥 이진수 11로 표현하고 플래그를 달면 되는데 굳이 2의 보수로 바꾼 다음 플래그를 다는 이유가 무엇인지 궁금합니다.
감사합니다.

입출력장치 파트 (DMA, 인터럽트 등)

안녕하세요 선생님. 혼공컴운 서적 덕분에 잘 공부하고 있습니다. 현재 입출력장치 파트를 공부 중인데, 관련하여 질문이 있어 이렇게 글을 올려요.

입출력 방식에는 크게 세 가지(프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력)이 있다고 하셨습니다. 그리고 DMA 입출력을 설명하실 때 시스템 버스의 사용 횟수를 최소화하기 위해 입출력 버스를 따로 두고, 입출력장치들은 그 입출력 버스를 통해 DMA 컨트롤러와 연결될 뿐 직접적으로 시스템 버스에는 연결되지 않는다 하셨습니다.

근데 그렇다면 프로그램 입출력 방식을 사용할 때는(즉, 메모리를 굳이 거치는 게 아니라 명령어를 통해 입력장치로부터 CPU의 레지스터로 데이터를 읽어오거나 CPU의 레지스터에서 출력장치로 데이터를 내보내거나 할 때는) CPU가 해당 입출력장치와 어떻게 소통하나요? 입출력장치는 DMA 컨트롤러를 통해서만 시스템 버스와 연결되어 있는데, 그렇다면 프로그램 입출력 방식을 사용할 때도 CPU가 DMA 컨트롤러를 거쳐서 입출력장치와 통신해야 하는 건지 궁금합니다. 그리고 인터럽트 기반 입출력 방식에서도 동일한 의문이 생깁니다. 입출력장치가 인터럽트 요청 신호를 보내서 인터럽트 서비스 루틴을 실행했을 때 해당 루틴도 어찌 됐든 해당 입출력장치에 접근이 가능해야 할 텐데 이때도 DMA 컨트롤러를 거칠 수밖에 없는지요!

다음으로, 여러 입출력장치가 보내는 인터럽트 요청 신호들의 우선순위를 판별해주는 PIC는 DMA 컨트롤러와는 별개로 각종 입출력장치와 연결된 구조일까요? 즉, 한 입출력장치의 입장에서 봤을 때 입출력 버스를 통해 DMA 컨트롤러와도 연결되어 있고 또 다른 핀으로는 PIC에도 연결된 구조일까요?

마지막으로, 여러 입출력장치가 인터럽트 요청 신호를 보낸 경우에, 하나(A)를 처리하고 나면 나머지들 중에서 또 하나(B)를 골라 다음 처리를 이어가야 할 텐데, 그러기 위해서는 PIC에 입력되던 A의 인터럽트 요청 신호를 리셋하는 절차가 필요할 것 같은데 이게 맞는지 궁금하고, 또한 인터럽트 플래그뿐만 아니라 PIC가 최종적으로 건네준 인터럽트 요청 신호를 받아도 되는지 확인하려면 현재 처리 중인 작업의 우선순위도 어딘가에 저장을 하고 있고 이것과 비교해야 할 것 같은데, 이는 CPU 내 레지스터에 저장이 되고 인터럽트 서비스 루틴이 실행될 때마다 저장되는 '어떠한 정보'에도 그것이 포함되는 게 맞을까요?

p.355~356 세마포 `signal` 함수

작동하는 코드라기 보다는 pseudo-code라서 큰 문제는 없을 것 같습니다만,
wait 함수는

wait() {
    while ( S <= 0 )
    ;
    S--;
}

와 같이 세미콜론이 있는 반면

signal 함수는

signal() {
    S++
}

와 같이 세미콜론이 생략되어 있어,
일관성을 유지하는 쪽이 좋을 것 같다는 제안 드립니다.

(355페이지 코드만 언급했지만 356페이지 코드도 마찬가지.)

같은 x86-64 임에도 어셈블리어가 다른 이유가 궁금합니다?

안녕하세요!
책과 유튜브를 열심히 보는 독자입니다.

godbolt.org에서
같은 x86-64임에도 gcc 버전 4.1.2에선
레지스터 앞에 %가 붙고
다른 gcc 12.5버전은 %가 안붙는 이유가 무엇인지요?
( 예. push %rbp 와 push rbp)

결국 어셈블리어는 기계어와 일대일 매칭이 되어야
하는 것이 아닌가요? 그렇다면 고급언어를 컴파일한
어셈블리는 같아야하는 것이 아닌가 하는 질문 드립니다
초보적인 질문이라 죄송합니다.

교재 116p 질문드립니다.

교재 p.116 4번 과정에서 제어장치가 메모리 읽기와 관련된 제어신호를 제어버스에 보내는 것은 알겠는데, 이 과정에서 제어장치는 무엇을 입력으로 받는 것인가요?

제어장치의 경우 클락, 플래그, 명령어 레지스터, 받아 제어신호를 내보내는 것으로 이해했는데, 위 상황에서는 명령어 레지스터가 어떤 값이 들어간다고 생각해야하는건가요?

p.151 오탈자

p. 151 맨 아래 2번째 줄부터
데이터 버퍼 레지스터, 데이터 주소 레지스터
데이터 부분 메모리로 바꾸면 되겠죠?

P. 295 확인문제 2번

2번 문제의 1번 보기에 다음과 같이 나와 있는데

① 문맥 교환은 빠르게 수행될수록 좋습니다.

"빠르게"라는 표현이

  • 문맥 교환이 이루어지는 주기가 빠른 것인지
  • 문맥 교환 과정 자체가 빠르게 실행되는 것인지

중의적으로 해석될 여지가 있어

① 문맥 교환은 자주 수행될수록 좋습니다.

라고 하는 편이 명확할 것 같다는 제안 드리고자 이슈를 남깁니다.

멀티 스레드에 관해서 질문드립니다!!!!

혼공컴운 독자인데 읽기도 쉽고 그림이 많아서 정말 잘 읽고 있습니다.
p311 쪽 멀티스레드 부분을 읽다가 궁금증이 생겨 질문 남깁니다.
멀티스레드에서 스레드마다 레지스터와 스택을 독립적으로 가지고 있는데 왜 이렇게 구성되어 있는걸까요?
인터넷에 검색해보니 이런식으로 설명이 되어 있지만 이해가 안돼서 쉽게 설명해주시면 감사하겠습니다.

스택을 스레드마다 독립적으로 할당하는 이유
스택은 함수 호출 시 전달되는 인자, 작업 후 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다.
이에 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고, 이는 독립적인 실행 흐름이 추가되는 것이다.
스레드의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.

PC Register를 스레드마다 독립적으로 할당하는 이유
PC값은 스레드가 명령어의 어디까지 수행하였는지를 나타내게 된다.
스레드는 CPU를 할당받았다가 스케쥴러에 의해 다시 선점당한다.
그렇기 때문에, 명령어가 연속적으로 수행되지 못하고 어느 부분까지 수행했는지 기억할 필요가 없다.

컴파일언어와 인터프리터언어 질문 (85page)

컴파일 언어가 인터프리터 언어보다 빠르다고 설명되어있습니다.

컴파일 언어의 경우, 전체코드를 목적코드로 컴파일 + 목적코드를 실행 하는 것이고
인터프리터 언어의 경우, 한줄 단위로 저급언어로 해석 & 실행 한다고 하셨는데

제가 느끼기에는 컴파일 언어랑 인터프리터 언어 둘다 '저급언어로 해석+실행' 시키는 관점에서는 수행 단위가 다를뿐 시간은 비슷할것 같다고 느껴집니다.

어떤 부분에서 컴파일 언어가 인터프리터 언어보다 빠른것인지 설명 부탁드립니다.

간접 주소 지정 방식 관련 질문

좋은 강의 감사드립니다. 간접 주소 지정 방식에 질문이 있어 댓글 남겨봅니다!
직접 주소 방식은 표현할 수 있는 주소의 크기가 제한되기때문에 간접 주소 지정 방식을 사용한다고 설명해주셨는데요.
제가 든 의문점은 "결국 간접 주소 지정 방식에서의 가리키는 주소도, 직접 주소 지정 방식과 같은 메모리 주소일텐데 다른점이 있을까?" 였습니다.
그렇다면 '주어진 비트 내에서 표현 가능한 주소값' 중 하나를 선택해 해당 주소값에 '실제 데이터가 저장되어 있는 큰 주소 값'을 넣어두는 건가요?
다만 그러면 또 드는 생각이, 만약 메모리 내에 '주어진 비트 내에서 표현 가능한 주소값'이 모두 사용중이라면 어떻게 되는거지? 입니다. 구글링을 해봐도 해당 내용에 대한 해답을 얻지 못해 질문을 남깁니다 ㅠㅠ
다시 한번 좋은 강의 너무 감사드립니다 !!

8장 입출력 장치 내용 중 "주소 공간"

안녕하세요 저자님,
집필해주신 책으로 동기들과 함께 스터디를 진행하고 있습니다.
감사합니다.

8장을 읽다가 "주소 공간"이라는 단어를 봤는데 이게 무얼 뜻하는지 잘 모르겠어서 질문드립니다.

08-2 다양한 입출력 > 프로그램 입출력 > 메모리 맵 입출력 & 고립형 입출력 모두에서 "주소 공간"이 등장하는데
스터디원들과 상의를 해봤는데도 그 의미를 잘 모르겠어서 질문드립니다.

"주소 공간"이 어떤 걸 의미하는 것인가요?

감사합니다.

최악 접합 방식의 이점?

최초 적합 방식은 검색 시간이 짧다는 이점이 있고
최적 접합 방식은 잉여 공간을 최소화할 수 있다는 이점이 있는데
최악 접합 방식은 어떠한 이점이 있기에 사용하는지 잘 판단이 되지 않아
이 부분에 대한 추가 설명을 해주시면 감사겠습니다.

인터럽트 서비스 루틴에 관하여 질문이 있습니다.(대략 135p 전후)

  1. 135p 에 'CPU 는 하드웨어 인터럽트 요청을 보낸 대상으로부터 데이터 버스를 통해 인터럽트 벡터를 전달받습니다.' 라고 적혀있는데, 그 전 페이지에 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있기 때문에 CPU 는 인터럽트 벡터를 통해 특정 인터럽트 서비스 루틴을 처음부터 실행할 수 있습니다. 라고 적혀있습니다. 그렇다면, 인터럽트 벡터는 주소버스를 타지 않고 데이터 버스를 타는 이유는 무엇인가요?? 인터럽트 벡터에 담겨있는 시작 주소를 전달 받아서 프로그램 카운터에 넣은 뒤 실행해야 할 것 같은데..제가 생각한 것과 동작이 다르거나 주소 외에 데이터 정보가 추가로 들어있는 건가요??

  2. 되게 멍청한 질문같긴 한데... 함수가 순차적으로 실행되면 메모리에서 스택영역(↔ 힙 영역)에 스택 프레임이 따로 쌓이잖아요..마찬가지로 인터럽트 서비스 루틴도 스택에 저장될 때, 스택 프레임이 쌓이는 건가요? 만약 맞다면 인터럽트 서비스 루틴의 스택 프레임도 함수의 스택프레임과 구조가 똑같나요??

  3. 2번과 비슷한 질문이지만 함수가 실행 될 때, 인터럽트 서비스 루틴은 함수와 비슷하게 동작할까요?? C언어에서 함수가 실행 될 때 CALL 과 RETURN 명령어가 실행된다는 것은 이해를 했는데.. 비슷한 맥락으로(스택에 저장된다는 점) 인터럽트 서비스 루틴이 발생했을 때도 CALL 과 RETURN 명령어가 실행 되는지 궁금합니다.

  4. 만약 둘 다 명령어가 실행된다면.. 큰 맥락으로 봤을 때, CALL(호출) > JUMP(호출한 곳으로 점프) > RETURN(다시 돌아감) 순으로 실행되나요? C언어에서의 RETURN 은 보통 값을 반환한다는 뜻을 가지는데, 여기서도 값을 반환한다는 뜻을 가지나요? 아니면 다시 CALL 전의 주소로 돌아간다는 뜻을 가지나요?

  5. 둘을 비교하다보니까 궁금해진건데, 인터럽트 등등 처럼... 하나의 프로그램은 하나의 거대한 함수라고 볼 수 있을까요? 프로그램도 명령어와 데이터로 이루어져있고, 함수도 명령어와 데이터로 이루어져있잖아요. 특히 C언어에서 꼭 프로그램은 main 문이 존재하기도 하구요..

p356 세마포 예시에 대한 질문입니다.

본 책에서는 P1, P2, P3 3개의 프로세스가 존재하는 경우, 공유자원 S(카운팅 세마포, 2개)의 변화에 따라 어떻게 프로세스가 대기큐에 들어갔다가 추후 준비큐로 이동하여 실행되는지 설명하고 있습니다.

근데, 예시를 P1, P2, P3, P4 4개 프로세스라고 가정을 하면, 동작이 조금 이상해지는 것 같습니다.

  1. P1, P2 가 먼저 임계구역에 진입합니다. (S 값변화: 2 -> 0)
  2. P3 가 임계구역에 진입하려고 하지만 실패하고, 대기큐로 들어갑니다. (S 값변화: 0 -> -1)
  3. P4 가 임계구역에 진입하려고 하지만 실패하고, 대기큐로 들어갑니다. (S 값변화: -1 -> -2)
  4. P1이 임계구역 작업 종료 후, signal()호출합니다. (S값변화: -2 -> -1)
    => 4번단계 종료 후, 실제 임계구역에 진입하여 실행하고 있는 것은 P2 뿐인데(= 자리가 하나 남았음), S값이 -1 이라서 P3, P4 둘중 하나를 wakeup 할수없음.

이 부분 제가 잘못 이해하고 있는것일까요?

P.323 프로세스 상태 다이어그램

준비 큐와 대기 큐가 반영된 프로세스 상태 다이어그램을 보면 다음과 같이 준비 상태가 두 개 존재합니다.

image

다음과 같이 하나로 표현해도 될 것 같은데 준비 큐가 포함된 준비 상태를 따로 표현하신 이유가 잘 이해가 되지 않아 질문 드립니다.

image

p. 175 확인 문제 2번 질문있습니다.

  1. RISC 에 대한 설명 중 올바르지 않은 것을 고르세요.
  2. CISC보다 프로그램을 실행하는 명령어 수가 적습니다.
  3. CISC보다 다양한 메모리 접근 방식이 있습니다.
    (이하 생략)

1번 2번 둘 다 올바르지 않다고 생각합니다.
RISC는 메모리에 접근하는 방법을 load, store 두 개로 제한할 만큼 메모리 접근을 단순화하고 최소화를 추구합니다.(p.173)에 따르면 2번도 잘못된거 아닌가요?

p. 374 13-1 교착상태 확인문제 1번

  1. 교착 상태에 대한 설명으로 옳은 것을 고르세요.

보기를 아무리 봐도 옳은 것 3개, 옳지 않은 것 1개가 있어
문항이 다음과 같이 수정되어야 하는 것으로 보여 제보 드립니다.

  1. 교착 상태에 대한 설명으로 옳지 않은 것을 고르세요.

생산자 소비자 자바코드

public class ConstruntorConsumerTest {
public static int sum=10;

public static void main(String[] args) throws InterruptedException {
	
	Thread constructor=new Thread(()->{
		for(int j=0;j<100000;j++) {
			sum++;				
		}				
	});		
	Thread consumer=new Thread(()->{
		for(int j=0;j<100000;j++) {
			sum--;
		}
	});
	constructor.start();
	consumer.start();
	
	constructor.join();
	consumer.join();
	System.out.println(sum);
	
}//메인

}//클래스

맞게 작성 했는거 같은데 혹시나 필요 하실 분이 있으실 거 같아서 올려봅니다

선생님 DB랑 네트워크도 책좀 내주세요...

선생님의 책이 너무 마음에 들고 유용합니다....
네트워크랑 DB 학교 수업도 들었는데 무슨말인지 이해가 잘 안되고 자신이 읎습니다
슨생님은 공부를 많이 하셔서 책을 많이많이 내셔야 합니다....
팬입니다

선생님 동기화 기법 뮤텍스락,세마포,모니터 질문 드려요

선생님 안녕하세요
책 정말 잘 읽고 있습니다
다름이 아니라 책에 나온 동기화 기법 중에
뮤텍스락은 마치 자바에서 synchronized블락을 하나 설정하는것처럼 보이고
세마포어는 자바에서 object클래스의 wait&notify를 설정하는거 같고
모니터는 reentrant Lock과&condition을 이용하는것과 매우 흡사하던데
자바에서 위 3가지 동기화 기법이 각각 뮤텍스락 세마포어 모니터를 구현해서 만든 것이 맞나요??

혼공운체 27강 프로세스 상태와 계층 구조 질문

프로세스 생성할 때 fork랑 exec해서 자식 프로세스가 만들어지는거 잖아요. 근데 fork해서 복제하고, exec해서 코드 영역이랑 데이터 영역의 내용은 바뀌고 나머지는 초기화 되면, 부모 프로세스랑 자식 프로세스의 유사점? 부모프로세스의 흔적? 이런건 없나요?

이중 모드 관련 질문 드립니다.

안녕하세요.

일전 문의에 대한 답변 감사합니다.
스스로 어려워 하던 게 바보스러웠을 정도로 간단 명료하게 이해할 수 있는 답변이었습니다.

오늘은 p271의 운영체제 이중모드와 관련하여 질문 드립니다.

  1. 이중 모드 구현 이유
    본문에서는 자원 접근을 제어하기 위해 이중 모드로 구분한 것으로 이해하였습니다.
    그런데 응용 프로그램이 빈번하게 모드 전환이 이루어진다는 내용을 보며
    '왜?' 이중 모드를 구현 했을까라는 의문이 들었습니다.
    시스템 호출하면 커널모드로 전환되어 자원 이용이 가능해 보여서
    애초에 단일 모드로도 가능하지 않을까하는 생각도 들었습니다.
    당연히 이중 모드로 구분한 이유가 있을 것 같은데 제가 이해를 제대로 한 것 같지 않아 문의드립니다.

  2. 이중 모드 = 운영체제 계정 권한?
    운영체제의 사용자 계정 권한(사용자 계정과 관리자(root) 계정으로 구분된 형태) 체계를
    이중 모드의 구현으로 보면 되는것인지 궁금합니다.
    윈도우에서도 일부 시스템의 경우,
    [관리자 권한으로 실행]이라는 옵션값으로 실행해야 특정 명령어나 디렉터리 접근이 가능한 경우가 있어
    다른 것 같으면서도 '혹시 같은게 아닐까'라는 생각이 들어 문의드리게 되었습니다.

사실 책을 읽으며
이렇게 질문을 할 수 있게 되었다는게
'내용을 읽을 수 있게 되었다.'라는 감상이 들어 만족스럽습니다.

질문 글을 빌어 감사하다는 말씀 드리고 싶습니다.

p420 논리주소 그림 좌우 바뀜

p420 에서 계층적 페이지 설명할때,
계층적 페이징을 사용하지 않는 경우의 논리주소 구조그림이 p410의 그림과 좌/우가 바뀌어 있습니다.

Process 관련 Java code 문의드립니다.

안녕하세요. 책으로 공부를 즐겁게 하고 있습니다.

본 책 303페이지에 C/C++, Python, Java 로 작성된 프로세스/스레드 코드를 올려주시겠다고 했는데 확인할 수 없어서요!
어디에서 볼 수 있을까요?

감사합니다.

p407 오타수정

p407 하단에 페이지 테이블을 설명하는 문장 하나가 고쳐져야 할것 같습니다.

원문: "프로세스마다 각자의 프로세스 테이블을 가지고 있고 각 프로세스의 페이지 테이블들은 메모리에 적재되어 있습니다."
수정: "프로세스마다 각자의 페이지 테이블을 가지고 있고 각 프로세스의 페이지 테이블들은 메모리에 적재되어 있습니다."

추가 강의는 언제쯤 더 올라올까요 ?

안녕하세요. 금일 11월 6일 기준 21강까지 업로드가 된 것 같아요.

책 으로보니까 전체 15챕터 중에 7챕터 정도까지니까 한 중간정도? 올라간 것 같더라구요.

혹시 나머지 8챕터부터 15챕터까지의 강의는 언제쯤 올라오는지 알 수 있을까요 ?

아무래도 후반부가 운영체제라 중요하잖아요. 아니면 책에 따로 코드?같은게 있어서 그걸로 인증하면 볼 수있는걸까요 ?

열심히 정주행중인데 강의가 중간에 끊겨있는 것 같아 글남깁니다.

P.137 명령어 사이클 그림

CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 인터럽트 여부를 확인하고,
인터럽트가 발생한 경우 인터럽트 사이클을 수행한다고 이해했습니다.

그런데 그렇게 되면 P.137의 그림이 다음과 같이 수정되어야 하는 것 아닌가 싶어 질문 드립니다.

image

페이지 폴트에 대한 질문입니다

강의참조 : https://www.youtube.com/watch?v=nF26uioM6zU&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=41
437쪽 확인문제 1번 관련(페이지교체알고리즘 본문내용 포함) 질문입니다

[페이지 폴트]라는게 결국 프레임에 없는 데이터가 있을 때 발생하는 것으로 알고있는데
책에서는 빈 프레임에 채워질때는 페이지폴트가 안발생한다고 되어있습니다.

제가 기사시험 필기를 이번달에 치면서 공부할때는 전자로 공부해서 질문드립니다

p321, p322 에서 대기상태 큐에 대한 설명에 관하여.

안녕하세요. 좋은 책 만들어주셔서, 잘 보고 있습니다 :)
책을 보다가 문의사항이 있어서 github에 이슈 등록합니다.


아래 그림은 p321 의 큐 그림이고,
image

아래 그림은 p322 의 큐 그림입니다.
image

대기 큐로 들어가는 조건이 서로 상이하게 설명되어 있어서 이 부분이 조금 헷갈리는데요.

  1. p321에서는 입출력 장치 요청
  2. p322에서는 입출력 완료(인터럽트)

제가 이해하고 있는 것은 p321 처럼 입출력장치 요청이 맞지 않나? 생각하고 있습니다.
그래서 p321 의 "대기 큐"에 대한 설명이.. 현재는 "입출력장치를 이용하기 위해 대기 상태에 접어든 프로세스들이 서는 줄" 이라고 되어 있는데, "입출력장치에 요청을 하고, I/O작업이 끝나기를 기다리고 있는 프로세스들이 서는 줄" 이 더 맞는 표현이 아닌가 싶은데,

일단 제가 이해하고 있는 것이 맞는지에 대해서 확인부탁드리고 싶습니다.

p136 - 인터럽트 발생시 실행하던 정보를 저장하는 스택에 대해서 궁금합니다.

안녕하세요 🙇‍♂️
책 읽던 중 궁금증이 생겨 질문드립니다.

스크린샷 2023-02-10 오전 1 10 32

  1. 인터럽트가 발생하면 CPU에서 처리 중인 정보가 스택에 저장이 된다고 하셨는데, 말씀하신 스택은 별도로 할당된 메모리 영역인가요?
  2. 만약 별도로 할당된 메모리 영역이라면 운영체제에서 관리하게 된다는 의미인데, 커널에 할당된 메모리 영역에서 관리되는건가요?
  3. 인터럽트 서비스 루틴이 실행되면 프로세스가 교체된다고 생각하고 PCB로 저장이 되겠구나 생각을 했는데, 스택이라는 영역을 사용하는 것인거죠?

항상 재미있고 유익하게 읽고 있습니다. 감사합니다 ☺️

P.98 레지스터 주소 지정 방식

P.98의 "레지스터 주소 지정 방식" 설명에 다음과 같은 내용이 있습니다.

다만, 레지스터 주소 지정 방식은 직접 주소 지정 방식과 비슷한 문제를 공유합니다. 표현할 수 있는 레지스터 크기에 제한이 생길 수 있다는 점입니다.

그런데 "레지스터 주소 지정 방식"이 가진 이슈는 "직접 주소 지정 방식"보다 "즉시 주소 지정 방식"과 비슷한 것 아닌가 하는 의문이 들어 질문 드립니다.

레지스터가 나타낼 수 있는 데이터 크기가 제한되어 있어, 레지스터가 데이터 그 자체가 아닌 데이터의 주소를 가지고 있도록 하는 방식이 "레지스터 간접 주소 지정 방식"이라고 이해하여 다음과 같은 관계가 성립한다고 이해했는데요,

데이터 그 자체 저장 데이터의 주소 저장
오퍼랜드 필드 즉시 주소 지정 방식 직접 주소 지정 방식
레지스터 레지스터 주소 지정 방식 레지스터 간접 주소 지정 방식
특징 저장할 수 있는 크기가 제한되어 있어 데이터 크기 한정적 데이터가 메모리 상에 저장된 주소를 저장하여 데이터 크기로부터 자유로움

직접 주소 지정 방식 : 레지스터 주소 지정 방식
간접 주소 지정 방식 : 레지스터 간접 주소 지정 방식
의 관계가 아니라
즉시 주소 지정 방식 : 레지스터 주소 지정 방식
직접 주소 지정 방식 : 레지스터 간접 주소 지정 방식
라고 인식한 건,

즉시 주소 지정 방식: 저장할 수 있는 데이터 크기가 오퍼랜드 필드 크기만큼으로 제한적.
직접 주소 지정 방식: 표현할 수 있는 유효 주소가 오퍼랜드 필드 크기만큼으로 제한적.
간접 주소 지정 방식: 상대적으로 느리지만 데이터 크기는 자유.

레지스터 주소 지정 방식: 저장할 수 있는 데이터 크기가 레지스터 크기만큼으로 제한적.
레지스터 간접 주소 지정 방식: 표현할 수 있는 유효 주소가 레지스터 크기만큼 제한적?

이런 느낌으로 이해했기 때문인데,

"레지스터 주소 지정 방식"이 "즉시 주소 지정 방식"이 아닌 "직접 주소 지정 방식"에 대응하여 그것과 비슷한 문제를 공유하는 이유를 좀 더 자세히 설명해주시면 감사하겠습니다.

p433 오타

가령 세 개의 프로세스에 총 300개의 프레임을 할당할 수 있다면
각 프로세스에 100개의 프로세스를 할당하는 방식이지요.

가령 세 개의 프로세스에 총 300개의 프레임을 할당할 수 있다면
각 프로세스에 100개의 프레임을 할당하는 방식이지요.

P.215 오탈자 "대용화"

(생략) MLC 타입은 SLC 타입보다 대용화하기 유리합니다.

라는 표현에서 "대용화"라는 어휘를 처음 들어 뭐지 했는데, 다음 페이지의 TLC 타입 설명을 보니 "대용량화"의 오탈자인 것 같아 제보 드립니다.


추가로, 이번 장 학습하며 문득 인지한 건데 너무 사소한? 거라 그냥 넘어가려고 하다가 제보하는 김에 같이 언급하자면
확인 문제에서 "보기"를 언급할 때 "〈보기〉"처럼 홑화살괄호를 사용하는 경우와 그렇지 않은 경우가 혼용되고 있더군요.
책의 내용과 직접적으로 관련 있는 부분은 아니긴 하지만 전반적인 책의 퀄리티를 높이기 위해서는 통일하는 쪽이 좋을 것 같아
이런 식으로 작성한 특별한 이유가 있는 게 아니라면 다음 인쇄에는 반영하실 수 있도록 조심스럽게 언급해봅니다. ㅎㅎ

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.