본문 바로가기

CSE30

[시스템프로그래밍] 메모리2 직접리스트직접 가용 리스트 방식은 가용 블록들의 리스트만 관리하며, 모든 블록을 관리하지는 않는 방식이다.이 방식을 사용하면, 다음 가용 블럭을 단순히 사이즈로는 접근이 불가하므로, 포인터를 저장한다. 왼쪽은 할당된 블럭의 구조이다. 이 방식은 이전의 간접리스트와 같다.오른쪽은 가용블록이다. 이전에 데이터를 넣어두는 공간으로 썼던 payload를 이전, 다음 가용블럭을 나타내는데 사용한다. 논리적으로 위 a,b,c 블럭들은 모두 순서대로 연결되어있다.하지만 실제로 연결되어있는 링크는 메모리 블럭의 순서와 무관하게 정렬되어있다.(C가 B보다 앞에있는게 가능하다.) 위 그림은 직접할당방식에서 malloc을 통해서 가용블럭이 할당되었을때의 결과이다.이 경우, malloc 후 남은 공간을 쪼개 새로운 가용블록으.. 2025. 12. 14.
[시스템프로그래밍] 동적 메모리 할당 메모리는 무한한 자원이 아니고, 할당되고 관리되는 자원이라 다양한 응용 프로그램들은 메모리에 큰 영향을 받는다. 동적 메모리 할당동적 메모리 할당은 프로그램이 실행되기 전에는 크기를 알 수 없는 자료구조를 위해 사용한다.예를 들어 몇개의 숫자가 들어올지 모르는 상황에서, 무조건 max size만큼 자원을 할당해두는건, 메모리 낭비를 일으킬 수 있다.또한 n개의 메모리를 할당했는데 그 이상으로 들어온다면 정적 메모리 할당 상태에서는 대응이 불가하다.이를 방지하기 위해 동적 메모리할당을 사용한다. 동적 메모리 할당에는 직접 할당과 간접 할당이 있다.직접 할당은 응용프로그램이 메모리를 할당하고, 반환까지 한다. malloc, free가 이 경우에 해당한다.반면 간접하다은 편리하게 응용프로그램이 할당하지만, 반.. 2025. 12. 13.
[시스템프로그래밍] 프로세스2 이번엔 wait와 쉘에서의 프로세스 관리에 대해서 설명해 볼 것이다. 앞서 본 내용에서는 자식 프로세스가 종료되는 경우, 커널은 프로세스를 시스템에서 직접 제거하지 않고, 부모 프로세스가 제거하도록 둔다.만약 부모가 정상적으로 자식프로세스를 처리하지 못하면 init 프로세스가 청소하도록 한다. waitint wait( int *child_status) 형태이다.현재 프로세스를 자신의 자식프로세스들 중 하나가 종료될 때까지 정지(기다리)하도록 하는 함수이다.여기서 child_status는 자식프로세스의 종료이유를 알기 위해 파라미터로 전송한다.(이 주소 줄테니 여기다가 종료이유 적고 리턴해)리턴 후 커널은 자식프로세스를 제거한다.이 방식으로 부모는 자식프로세스를 명시적으로 삭제한다. 이 코드르 보자여기서 .. 2025. 12. 12.
[시스템 프로그래밍] 예외적인 제어흐름 - 프로세스 컴퓨터는 다음과 같이 시간이 흐름에 따라 주어진 일을 한다. 보통 제어의 흐름을 변경하는 명령어는 call, return 등이다. 하지만 이정도로 쓸만한 시스템을 만드는 것은 불가능하다따라서 시스템은 예외적인 제어흐름을 위한 메커니즘을 필요로 한다.(파일을 열어야 하는 경우, 사용자가 ctrl-c를 눌렀을 경우...) 예외적인 제어흐름하위 매커니즘예외 - 시스템 이벤트에 대한 반응으로 제어흐름을 변경, 하드웨어와 os를 함께 사용0으로 나누기, 잘못된 메모리 접근, 타이머 인터럽트 등...시작 주체가 하드웨어이다. 상위 매커니즘프로세스 컨텍스트 전환(os, 하드웨어 타이머 구현), 시그널(os로 구현), nonlocal 점프 예외상황(Exceptions)특정한 이벤트에 대한 반응(0으로 나누기, ctrl.. 2025. 12. 2.
[시스템프로그래밍] 실수의 표현 및 처리(1) 저번에는 정수를 표현하는 법을 봤다. 이번엔 실수를 표현하는 법을 보겠다. 소수점 표시 방법크게 두가지가 있다.고정 소수점 방식은 숫자에서 소수점의 위치를 고정시켜셔 숫자를 표시하는 것이다.예를들어 소수점 4번째 자리에서 고정한다고 하면 가장 큰 숫자는 9999.9999이고, 가장 작은 숫자는 0000.0001이다. 우리가 이번에 배울 부동소수점 방식은 소수점의 위치를 따로 정해두지 않는다.따라서 숫자 내에 유효숫자와 소수점의 위치를 표시한다.예를 들어 8자리 유효숫자와 2자리 지수로 표현할 때, 9.99999999E+50으로 표시할 수 있다.여기서 9.99999999가 유효숫자이고 E+50이 지수이다. 2진 소수우리가 이제까지 이진수를 사용하여 정수를 표시할 때에 맨 오른쪽부터 2의 0제곱, 2의 1제.. 2025. 10. 21.
[시스템프로그래밍] 2장 정보의 표현 및 처리(정수의 표현) 바이트 값의 인코딩아마 이 글을 보는 대부분은 논리회로를 배웠을 것이다.숫자는 위와 같이 10진수, 16진수, 2진수로 나타낼 수 있다. 컴퓨터의 워드 길이워드 길이는 정수값의 크기를 말한다. 요즘 컴퓨터는 대부분 64bit(8byte)이다.이 때 하나의 정수의 주소는 메모리에서 한 덩어리(8byte)의 첫번째 위치이다. 따라서 연속된 워드의 주소는 4또는 8 바이트씩 증가한다. 32bit, 64bit, 48bit 컴퓨터에서는 각각의 자료형을 위와 같은 수의 byte로 표시한다. Byte Ordering가장 생소한 개념일 것이다. 컴퓨터마다 여러 바이트로 이루어진 데이터를 저장하는 순서가 다르다. Sun, Mac, 인터넷은 big Endian,x86, 안드로이드, ios, 윈도우를 실행하는 ARM 프로세.. 2025. 10. 11.