본문 바로가기
전산 필기 시험/전산학(컴퓨터일반) 개념정리

전산학 오답노트

by 응_비 2022. 5. 27.
커널스레드 / 오버헤드 우선 스레드부터 정리해 보자면, 운영체제 공부를 했으면 다들 알 듯이 '프로세스 내 작업 단위'이다.
이것은 하나가 될 수도 있고 여러 개가 될 수 도 있다. 여러 개의 스레드가 동작하면
'멀티 스레드' 방식으로 동작하게 되는 것이다.

커널 수준 스레드는
커널 레벨에서 생성되는 스레드이다.
운영체제 시스템 내에서 생성되어 동작하는 스레드로,
커널이 직접 관리한다.

그런데
커널 수준에서는 프로세스가 주기억 장치에 여러 개가 적재되어 CPU 할당을 기다리며 동작한다.
CPU에서 인터럽트 발생으로 현재 작업 중인 프로세스가 Block 되고 다른 프로세스로 변경할 때,
CPU 내 재배치 레지스터에 다음에 실행할 프로세스 정보들로 교체를 하고 캐시를 비운다. 이 것을
컨텍스트 스위칭이라고 한다.

이 컨텍스트 스위칭이 일어날 때는
CPU가 일을 못한다. 그래서 이게 자주 일어나면 성능에 영향이 발생하게 되는 단점이 있다.
하지만
커널이 직접 관리하므로 특정 스레드가 Block이 되어도 다른 스레드들은 독립적으로 일을 할 수 있다.

커널이 직접 스케줄링하고 실행하기 때문에 커널의 관리 지원을 많이 받을 수 있지만, 그 만큼 오버헤드가 늘어난다.
https://helloinyong.tistory.com/293
Associative Mapping
Associative mapping

데이터 내용까지 확인할 수 있다. 고가의 레지스터이다.

가장 빠르고 융통성있는 cache구조이다. Argument register가 중간에 있다.

모든 숫자는
8진수로 구성되어있다. cache에 데이터가 없는 경우에 CPU는 주기억장치에서 해당자료를 찾아 cache로 옮긴다.
캐쉬에 여유공간이 있으면
그 공간에 주소와 데이터를 저장한다.
cache가 꽉 차있는 경우는 기존 cache 주소와 데이터쌍 중 주어진 알고리즘에 의해 해당 주소 데이터 쌍이 새로운 쌍으로 대체된다.
 
스와핑 스와핑

부족한 메모리 공간을 좀 더 효율적으로 관리하려는 메모리 관리 기법.
CPU에서 시행되지 않는 프로세스 즉 ready상태이거나 waiting상태에 있는 프로세스들 중
일부를 메모리 안에 보관하지 않고 하드디스크 같은 저장장치에 보관한다는 뜻
https://goodmilktea.tistory.com/31?category=816729
리피터, 라우터 - 리피터(Repeater)
긴 케이블일수록 신호가 약해지기 때문에 신호를 멀기 보내기 위한 증폭 장치이다.
지금은 다른 네트워크 장비에 기본적으로 리피터 기능이 탑재되어있어 사용하지 않는다.

- 허브(Hub)

리피터 역할을 하며, 기존 리피터와 다르게 여러 장비를 연결할 수 있다.
특징으로는 허브는 CSMA/CD 방식을 적용하고 있기 때문에 여러 장비에서 동시에 데이터를 전송하지 못한다.

- 브리지(Bridge)
네트워크 세그먼트를 서로 연결해 주는 장치이다.
세그먼트라고 하면 경우에 따라서 의미가 다르다.
여기서 세그먼트란 하나의 큰 네트워크를 구성하는 작은 네트워크들을 세그먼트라고 표현한다.
그 세그먼트를 연결해주는 것이 브리지, 스위치 등 같은 장비들이 있다.

- 스위치
브리지랑 비슷하지만 차이가 있다. 차이점은 처리방식이 스위치는 하드웨어, 브리지는 소프트웨어 방식이기 때문에
속도는 스위치가 훨씬 빠르다.

- 라우터(Router)
라우터는 네트워크간 데이터 전송을 위해 최적 경로(Route)를 설정하며, 이 경로를 따라 데이터를 전송하는 장비를 말한다.
https://heisyoung.tistory.com/52
폴링방식
폴링(Polling) 방식

CPU가 주변 입출력 장치들(키보드, 센서, LCD 등)에서의
변화를 지속적으로 계속 확인하고 그에 따라 프로그램을 처리하는 방식을 말한다.
프로그램은 쉽게 구현할 수 있지만 예를 들어 컴퓨터의 키보드를 폴링방식으로 구현한다고 생각해보자.
컴퓨터로 영화를 보고 있는데도 키보드를 치고 있는지 아닌지 계속 확인하는 작업을 한다면 CPU의 성능을 제대로 활용할 수 없다.
하지만 아두이노, AVR 등에서 간단한 프로젝트를 구현할 때는 코드를 작성하기 간편하다는 장점 때문에 폴링 방식을 사용하기도 한다.
폴링 방식이 꼭 나쁜 건 아니다. 나는 드론을 만들 때 자세 센서에서 계속 값을 읽어와야하는데, 폴링 방식으로 자세 센서와 상호작용했다.

장점
1.
정해진 순서에 의해 명령을 반복적으로 처리하므로 프로그램을 작성하고 이해하기 쉽다(소규모 프로그램을 작성할 때만).


단점
1. 입출력 장치들과의 상호작용을 폴링 방식으로 많이 할 수록
CPU를 점유하는 시간이 증가하기 때문에 성능이 크게 떨어진다.
2. 한 루프를 다 돌아야지만 상태 변화를 확인 할 수 있다. 즉, 정확한 타이밍에 인터럽트가 발생했는지 알 수 없고
폴링 루프가 길어질 수록 반응 속도가 늦어지거나 실행되지 않을 가능성이 높아진다.

실행시간이 아주 짧다면 괜찮지만 실행시간이 길고 복잡할 수록 폴링 방식은 비효율적이다.
 
페이징 < 페이징의 특징 >

사용자/ 프로세스의 편의성

연속된 논리 주소 공간을 독립적으로 사용한다 - 주소 변환은 하드웨어와 운영체제에 의해 처리된다.

프레임 단위의 비연속적 메모리 할당

동적 메모리 할당에 따른 문제가 없다.
-> 외부 단편화가 없다.

내부 단편화

페이지 크기보다 작은 메모리를 요청하는 경우에 발생

페이지 크기가 작으면 내부 단편화 감소 - 페이지 테이블 크기 증가

예를들어 페이지 크기가 4KB인데 10KB의 메모리를 필요하는 프로세스는 이 페이지가 2개 하고 2KB할당되는 것이 아니라
3개가 할당되어야지만 10KB메모리를 쓸 수 있다.
그러면 마지막으로 할당된 페이지는 실제로 프로세스가 2KB 만 사용하고 나머지 2KB는 사용하지 않은 메모리가 된다.
-> 2KB 내부 단편화 발생
 
추상화 추상화란 사물을 사실적으로 표현하는 개념이 아니라 불필요한 부분은 제거하고
공통된 특징만을 추출하여 간결하고 이해하기 쉽게 만드는 작업을 의미한다.

객체지향에서의 추상화는 "모델링"을 의미합니다.
구체적으로 공통적인 부분, 또는 특정 특성을 분리해서 재조합하는 부분이 추상화입니다.
즉, 앞에서 배운 다형성과, 상속은 모두 추상화에 속합니다.
출처: https://ryuk.tistory.com/40 [DD's Life]
다형성 다형성
다형성은 하나의 개체가 여러 개의 형태로 변화하는 것을 말하며, 이를 객체지향에서도 유사하게 사용하고 있습니다.
이러한 다형성은 오버라이드 등을 통해서 구현합니다.
상속 상속
객체지향에서의 상속은 속성의 상속이 아닌, 하위로 내려갈수록 구체화되는 것을 의미합니다.
 
캡슐화(ENCAPSULATION) 캡슐화는 내부 구현에 대해 유연함을 제공해 주는 기법이다.
객체가 내부적으로 기능을 어떻게 구현했는지 감추는 것
변경 가능성이 높은 부분은 내부에 숨기고 외부에는 상대적으로 안정적인 부분만 공개함으로써 변경의 여파를 통제한다.
변경될 가능성이 높은 부분을 구현이라고 하고 상대적으로 안정적인 부분을 인터페이스라고 한다.
외부에 영향을 주지 않고 객체 내부의 구현을 변경할 수 있게 함
 

댓글