본문 바로가기

IT 공부104

[OS] - 운영체제의 멀티 쓰레드 스케쥴링 및 개수 제약 1. 커널 쓰레드와 사용자 쓰레드 차이 과거 오래된 유닉스 시스템에서는 멀티쓰레드를 지원해주지 않았고 멀티프로세스만을 지원했다. 그러나 시간이 흘러 멀티쓰레드를 지원해주는 OS가 생겨나면서 커널이 쓰레드 단위를 인식하고 직접 관리나 스케쥴링을 해주는 서비스를 제공해줬다. 이것이 커널 쓰레드다. 물론 커널 쓰레드를 거치지 않고도 쓰레드 기능을 구현해볼 수는 있다. 이것이 사용자 쓰레드다. 하지만 사용자 쓰레드는 사용하는 프로그래밍 언어를 통해 직접 구현해보거나, 혹은 쓰레드를 관리해주는 라이브러리를 가져와 사용해야 한다. 현대 운영체제는 쓰레드와 프로세스를 모두 관리해주기 때문에 사용자 공간 자체에서 직접 쓰레드를 구현해 사용하는 경우는 없는 편이다. 게다가 사용자 쓰레드를 커널과 독립적으로 사용하는 경우.. 2023. 12. 27.
함수 호출 시 스택프레임이 관리되는 원리 (어셈블리 레벨) 1. 스택프레임이란 프로그램이 실행되다가 함수를 호출하면 제어흐름은 호출된 함수 내부로 넘어간다. 이때 해당 함수가 작업하고 있는 데이터를 저장할 새로운 공간인 메모리 블록이 생성되는데, 이 블록에는 함수가 전달받은 인자나 내부 지역 변수 등이 저장된다. 이러한 함수의 데이터 블록은 위 그림과 같이 스택 자료구조로 적재된다. 프로그램의 본질이 main 함수로부터 실행이 시작되어 하위 함수를 호출해나가는 top-down 방식이기 때문에 자신을 호출한 함수로 다시 제어흐름을 넘기기 위해서는 호출 히스토리가 필요하며, 이를 위해 스택이 사용되는 것이다. 2. SP(스택 포인터)와 BP(베이스 포인터) 스택이 실제로 어떻게 관리되는지 어셈블리어를 확인해보자. 2-1. 실행 환경 사실 어셈블리는 시스템마다 종류가.. 2023. 12. 26.
2의 보수 계산법의 의미 2의 보수를 구하는 법은 아래와 같다. 원래 양수의 비트를 반전시킨다 (NOT 연산) 1을 더한다 예를 들어, 1101(2)가 있으면 부호를 반전해 0010(2)를 얻는다. 여기에 1을 더한 0011(2)이 원래의 숫자 1101(13이다)의 보수다. 바로 이 보수(complement)를 음수로 간주하자는 것이 컴퓨터의 음수 표현법이다. 왜 보수를 음수로 취급할까? +10과 -10은 더하면 0이 된다. +123과 -123은 더하면 0이 된다. 즉, 수학적으로 말하면 음수는 원래의 수에 더해져서 덧셈의 항등원(0)을 만들어내는 수로 정의된다. 0과 1을 반전시키면 비트가 다른 데이터를 얻는다. 이 둘을 더하면 모든 비트열에 대해 0과 1을 더하는 것이므로 11111....이 된다. 여기서 1을 더하면 올림이.. 2023. 12. 26.
은근히 헷갈리는 비트, 바이트 단위 정리 1비트는 컴퓨터가 표현하는 정보의 이론적인 최소 단위. 정확하게는 어떤 특정한 정보 안에 들어 있는 정보량을 측정하는 단위다. 1바이트는 컴퓨터가 처리하는 정보의 최소 묶음 단위. 물론 비트 하나로 정보를 코딩할 수는 있다... 그러나 우리가 일상에서 컴퓨터로 처리하고 싶은 정보는 복잡한 맥락에 속해 있으므로 하나의 비트만으로는 적절하게 정보를 인코딩할 수 없다. 하나의 비트만으로 표현할 수 있는 정보는 고작 성별(남자 or 여자), 출석 여부(출석함, 안함) 따위에 불과할 것이다. 그렇다고 매번 정보를 표현하기 위해 하나의 비트들을 여러개 모아서 코딩하는 것은 보통 귀찮은 일이 아닐 것이다. 따라서 비트를 세트로 모아 미리 묶어서 처리하는 것이며, 보통 1바이트(8비트)를 한 단위로 묶어 사용하는 것이.. 2023. 12. 26.