본문 바로가기

IT 공부/운영체제4

[OS] - 프로세스와 스레드의 차이 (매우 중요) 1. 멀티프로세스가 필요한 경우 (vs 쓰레드) 먼저, 멀티프로세스와 멀티쓰레드간 차이에 대해 고심하는 것이 은근히 까다로운 이유는 옛날과 현재의 멀티태스킹 프로그래밍 관점이 다르기 때문에 발생한다. 예를 들어, 웹 서버를 구현해야 한다고 생각해보자. 웹 서버는 한 번에 여러 명의 사용자들에게 서비스를 제공해야 한다. OS가 TCP 프로토콜을 수행하고, 소켓을 연결하고, HTTP 데이터를 파싱하고 해석하고, 이 데이터를 다시 식별된 URI를 담당하는 웹 서버의 특정 로직에게 넘겨주고, ... 이런 일련의 동작을 하나의 사용자에게 할당해야 한다. 옛날에는 이러한 요구를 한 번에 수행하기 위해 자식 프로세스를 생성하여 각각의 사용자의 요구를 처리할 수 있도록 프로그래밍했다. 물론 프로세스 생성 대신, 한 명.. 2023. 12. 28.
[OS] - 운영체제의 멀티 쓰레드 스케쥴링 및 개수 제약 1. 커널 쓰레드와 사용자 쓰레드 차이 과거 오래된 유닉스 시스템에서는 멀티쓰레드를 지원해주지 않았고 멀티프로세스만을 지원했다. 그러나 시간이 흘러 멀티쓰레드를 지원해주는 OS가 생겨나면서 커널이 쓰레드 단위를 인식하고 직접 관리나 스케쥴링을 해주는 서비스를 제공해줬다. 이것이 커널 쓰레드다. 물론 커널 쓰레드를 거치지 않고도 쓰레드 기능을 구현해볼 수는 있다. 이것이 사용자 쓰레드다. 하지만 사용자 쓰레드는 사용하는 프로그래밍 언어를 통해 직접 구현해보거나, 혹은 쓰레드를 관리해주는 라이브러리를 가져와 사용해야 한다. 현대 운영체제는 쓰레드와 프로세스를 모두 관리해주기 때문에 사용자 공간 자체에서 직접 쓰레드를 구현해 사용하는 경우는 없는 편이다. 게다가 사용자 쓰레드를 커널과 독립적으로 사용하는 경우.. 2023. 12. 27.
[리눅스] - 인터프리터, 가상머신, 그리고 실행 파일의 명령어 구조 차이 1. 실행 파일의 경우 (feat. C언어) C언어로 작성한 소스코드는 리눅스에 내장된 gcc 컴파일러를 통해 바로 시스템에서 실행 가능한 프로그램이 된다. gcc로 컴파일을 완료하면 위와 같이 ./hello 를 통해 즉시 실행할 수 있다. 이때, 어떤 프로그램을 매개하지 않는 모습을 확인할 수 있다. 컴파일된 파일은 시스템에서 바로 실행할 수 있는 것이다. 다만 이러한 이유로 C언어 개발자는 플랫폼의 기능을 사용하기 위해 운영체제 시스템과 API에 대한 정보를 배워야 하는 단점이 있다. 2. 가상 머신의 경우 (feat. 자바) 자바의 강점은 자바 가상 머신을 통해 컴퓨터와 OS 장치를 통째로 추상화하여 통일된 규격의 인터페이스를 사용한다는 점이다. 이 지점에서 C언어 개발자와는 달리 자바 개발자는 운.. 2023. 12. 18.
[리눅스] - 심볼릭 링크와 하드 링크 정리 및 사용 용례 1. 용어 정리 링크는 윈도우즈의 "바로가기" 아이콘을 만드는 것과 흡사하다. 데이터 블록은 실제 파일의 데이터를 의미하며, 하드 디스크 어딘가에 저장된 것이다. inode는 원본 파일의 데이터에 대한 정보와 위치를 알려주는 메타데이터다. 소유자, 권한, 생성 시간 등 "ls --long"으로 알아낼 수 있는 정보들이 사실 inode에 담긴 것이다. 하드 링크 파일은 리눅스의 사용자가 파일을 이용할 수 있도록 만든 일종의 아이콘과 같은 것이다. 리눅스 사용자는 파일을 찾을 때 inode를 직접 참조할 수 없다. 대신 원본 파일에 대한 링크를 통해 접근 가능하다. 즉, 하드 링크는 사실 바로 그 파일의 이름이다. (이러한 이유로, 사실 하드 링크는 그것이 링크로 생성되었는 것인지 아니면 원본인지 구분해내기.. 2023. 12. 18.