0% found this document useful (0 votes)
14 views28 pages

1

The document discusses the process creation mechanism in Linux using the fork() system call, illustrating how a parent process can create multiple child processes to perform tasks concurrently while sharing resources and communicating through IPC mechanisms. It also covers the importance of system calls, the role of APIs versus runtime environments, and strategies for managing multiple processes in a terminal environment. Additionally, it addresses concepts like virtual devices, process management, deadlocks, and the efficiency of interrupt handling in computer architectures.

Uploaded by

mranees5323
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views28 pages

1

The document discusses the process creation mechanism in Linux using the fork() system call, illustrating how a parent process can create multiple child processes to perform tasks concurrently while sharing resources and communicating through IPC mechanisms. It also covers the importance of system calls, the role of APIs versus runtime environments, and strategies for managing multiple processes in a terminal environment. Additionally, it addresses concepts like virtual devices, process management, deadlocks, and the efficiency of interrupt handling in computer architectures.

Uploaded by

mranees5323
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 28

Question 1:

Explain the process creation mechanism in Linux operating systems using the fork()
system call. Illustrate with a scenario where a parent process creates multiple child processes to
perform different tasks concurrently. Discuss how the parent and child processes share
resources and how they communicate with each other using Linux-specific mechanisms. Finally,
describe the termination of the processes and the handling of resources upon termination.

Answer:
Process Creation Mechanism in Linux using fork():

In Linux, the `fork()` system call is used to create a new process that is a copy of the calling
process. When `fork()` is invoked, a new process (child process) is created, which is an exact
copy of the calling process (parent process) at the point where `fork()` is called. After the
`fork()` call, both the parent and child processes continue execution from the next instruction
following the `fork()` call, but they have different process IDs (PIDs).

Scenario Illustration:

Consider a scenario where a parent process needs to perform multiple tasks concurrently by
spawning multiple child processes. Let's say the parent process is responsible for managing a
file system, and it needs to perform tasks such as reading, writing, and updating files
simultaneously.

1. Parent Process Creates Child Processes:


The parent process begins by forking multiple child processes using the `fork()` system call.
Each child process inherits a copy of the parent's address space, including variables, file
descriptors, and other resources.

2. Concurrent Task Execution:


Once the child processes are created, each child process executes a specific task concurrently
with other child processes. For example, one child process may be responsible for reading data
from a file, while another child process simultaneously writes data to another file.
3. Resource Sharing between Parent and Child Processes:
In Linux, resources such as memory, file descriptors, and CPU time are shared between the
parent and child processes. The copy-on-write (COW) mechanism ensures that memory pages
are shared between the parent and child processes until one of them modifies the shared
memory.

4. Inter-Process Communication (IPC):


To communicate and synchronize their activities, parent and child processes can use Linux-
specific IPC mechanisms such as pipes, shared memory, and signals. For instance, a parent
process may use a pipe to send data to a child process, or child processes may send signals to
the parent process to indicate completion of tasks.

Termination and Resource Handling:

Upon termination, a process in Linux releases its allocated resources to the system. The `exit()`
system call is used to terminate a process, and the process's exit status is passed to its parent
process. If a child process terminates before the parent process, it becomes a zombie process
until the parent retrieves its exit status using the `wait()` system call. Alternatively, orphaned
child processes are adopted by the init process (PID 1), which ensures their proper termination
and resource cleanup.

Conclusion:

In summary, the `fork()` system call in Linux allows for the creation of new processes,
facilitating concurrent execution of tasks. Parent and child processes share resources and
communicate using Linux-specific mechanisms, enabling efficient coordination and
collaboration. Upon termination, processes release their allocated resources, ensuring proper
cleanup and system stability.

Question 2:
Suppose you have a cluster of servers dedicated to processing large datasets for
scientific research. Each server hosts several processes responsible for different stages of data
analysis, including data ingestion, preprocessing, analysis, and visualization. Your IPC
mechanism must enable seamless communication between these processes to ensure efficient
data flow and coordination.
Answer:
To facilitate seamless communication between processes in a distributed computing
environment, we propose an inter-process communication (IPC) mechanism tailored for the
scenario described.

1. Message Passing:
- Our IPC solution employs a message-passing paradigm to facilitate communication between
processes running on different servers. Messages are structured to include metadata such as
source and destination identifiers, message type, and payload data.
- Communication protocols like TCP/IP or UDP/IP are utilized for reliable and efficient
message transmission over the network. We implement buffering mechanisms to handle large
volumes of data, ensuring that messages are queued and delivered in a timely manner.

2. Process Synchronization:
- Process synchronization is achieved through the use of synchronization primitives such as
locks, semaphores, and barriers. These mechanisms ensure that critical sections of code are
executed atomically and that data access is synchronized between concurrent processes.
- For example, during data preprocessing, processes may acquire exclusive locks to prevent
race conditions when accessing shared resources like files or databases.

3. Fault Tolerance:
- Our IPC architecture incorporates fault tolerance strategies to enhance system reliability and
resilience. This includes implementing error detection mechanisms such as checksums or
message acknowledgments to detect and recover from communication errors.
- Redundancy is employed through techniques like data replication or process mirroring to
ensure that critical tasks can be rerouted to alternative servers in case of node failures or
network disruptions.

4. Scalability:
- To address scalability challenges, our IPC mechanism employs distributed load balancing
techniques to evenly distribute workload across servers. This involves dynamically allocating
resources based on server capacity and current system load.
- Additionally, we utilize parallel processing techniques such as MapReduce or distributed
computing frameworks like Apache Spark to parallelize data analysis tasks and harness the
computational power of multiple servers.

5. Security:
- Security measures are integrated into our IPC framework to protect data integrity and
confidentiality. This includes implementing encryption algorithms such as SSL/TLS for secure
data transmission and enforcing access control policies to restrict unauthorized access to
sensitive data.
- Authentication mechanisms like digital signatures or token-based authentication are
employed to verify the identity of communicating processes and prevent spoofing or
impersonation attacks.

6. Resource Management:
- Our IPC mechanism optimizes resource utilization by dynamically allocating CPU, memory,
and network bandwidth based on workload demands. This involves implementing resource
management algorithms to prioritize critical tasks and allocate resources efficiently.
- Techniques such as job scheduling and resource pooling are utilized to maximize system
throughput and minimize latency, ensuring that computational resources are utilized effectively
across the cluster.

In conclusion, our IPC mechanism provides a robust framework for facilitating communication
and coordination between processes in a distributed computing environment. By leveraging
message passing, process synchronization, fault tolerance, scalability, security, and resource
management techniques, we ensure efficient data flow and reliable operation of the system,
thereby enabling seamless processing of large datasets for scientific research.

Question:3
Consider a scenario where a parent process in a web server application needs to handle
multiple client requests concurrently. The parent process listens for incoming connections and
spawns a new child process to handle each client request.

Answer:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
// Parent process
pid_t child_pid;
int i;

for (i = 0; i < 3; i++) {


child_pid = fork(); // Create a new child process
if (child_pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
} else if (child_pid == 0) {
// Child process
printf("Child process %d created with PID: %d\n", i+1, getpid());
// Perform task specific to child process
exit(EXIT_SUCCESS);
} else {
// Parent process continues loop to create more child processes
printf("Parent process %d creating child process %d\n", getpid(), i+1);
}
}

// Parent process waits for all child processes to complete


while (wait(NULL) > 0);

return 0;
}
Question:4
Write basic types of system calls ?

Answer:
System calls provide a way for programs to interact with the operating system kernel to
perform tasks such as managing files, manipulating processes, and accessing hardware
resources. Here are six basic types of system calls:

1. Process Management:
- Fork: Create a new process (child) from an existing process (parent).
- Exec: Load and execute a new program in the current process context.
- Exit: Terminate the current process and return resources to the operating system.

2. File Management:
- Open: Open an existing file or create a new one.
- Read: Read data from an open file into a buffer.
- Write: Write data from a buffer to an open file.

3. Device Management:
- Open: Open a communication channel with a device.
- Close: Release the communication channel with the device.
- Read: Read data from a device into a buffer.
- Write: Write data from a buffer to a device.

4. Information Maintenance:
- Get Process ID: Retrieve the unique identifier (PID) of the current process.
- Get Parent Process ID: Retrieve the PID of the parent process.
- Get System Time: Obtain the current time from the system clock.
- Get Process Status: Retrieve information about the state of a process.
5. Communication:
- Socket: Create a communication endpoint for networking.
- Bind: Associate a socket with a specific network address.
- Connect: Establish a connection to a remote socket.
- Send/Receive: Send or receive data over a network connection.

6. Memory Management:
- Allocate: Reserve memory space for a process.
- Free: Release previously allocated memory.
- Map: Map a portion of virtual memory to a file or device.
- Unmap: Remove the mapping between virtual memory and a file or device.

These system calls provide essential functionality for programs to interact with the operating
system kernel and utilize various resources effectively. They serve as the interface between
user-space applications and the underlying system software, enabling the execution of complex
tasks in a controlled and efficient manner.

Question:5
In a distributed computing environment, a parent process running on a server needs
to perform parallel processing of data received from multiple clients. The parent process
receives data packets from clients over a network connection and needs to process each packet
concurrently to improve system throughput and response time.

Answer:
Process Creation using fork():
The parent process running on the server can utilize the fork() system call to create multiple
child processes. Each child process inherits a copy of the parent's address space, including code,
data, and stack segments. By creating multiple child processes, the parent can distribute the
task of processing data packets among them, allowing for parallel execution.

Concurrent Processing:
Upon receiving data packets from clients over the network connection, the parent process
delegates the task of processing each packet to a separate child process. Each child process
executes a specific task related to processing the received data packet. For instance, one child
process may handle parsing the packet, another may perform analysis, and yet another may
handle transformation or storage.

Sharing Resources:
Parent and child processes share certain resources to facilitate communication and
coordination. These resources may include open file descriptors, network sockets, and memory
segments. By sharing resources, the parent and child processes can efficiently exchange data
and synchronize their activities without duplicating resource allocation.

Inter-Process Communication (IPC):


To facilitate communication between the parent and child processes, various IPC mechanisms
can be employed. In a Linux environment, common IPC mechanisms include pipes, sockets, and
shared memory. For instance, the parent process may use sockets to receive data packets from
clients, and then pass these packets to the child processes through IPC channels for further
processing.

Termination and Resource Handling:


Once a child process completes its task of processing a data packet, it terminates and returns its
exit status to the parent process. The parent process can collect the exit status of child
processes using the wait() system call. Upon termination, the resources allocated to the child
processes, such as memory and file descriptors, are released to prevent resource leaks and
ensure efficient resource management.

Conclusion:
In a distributed computing environment, the parent process can leverage the fork() system call
and various IPC mechanisms to enable parallel processing of data received from multiple
clients. By creating multiple child processes, sharing resources, and employing effective
communication channels, the parent process can achieve concurrent processing of data
packets, thereby improving system throughput and response time. Proper handling of process
termination ensures efficient resource management and prevents resource leaks in the system.
Question – 1
How does a API differ from a Runtime environment?
Answer
APIs function as a well-defined contract, specifying functions, parameters, and
data formats for program interaction. They offer a layer of abstraction, hiding the
underlying implementation details. This promotes reusability, allowing developers
to leverage existing functionalities. Popular examples include social media APIs or
payment gateway APIs.
RTEs provide the execution foundation for programs. They offer essential
libraries, interpreters, or compilers, along with system resource management,
ensuring a program has the tools it needs to run effectively. Each RTE is often
designed for a specific programming language, like the Java Runtime Environment
or the Python Virtual Machine.
Essentially, APIs define how programs talk, while Runtime Environments provide
the space for them to run.

Question – 2
A terminal provides a text-based interface for interacting with a shell, which
allows users to run programs and control the operating system. While a shell can
only execute one program in the foreground at a time, how can a user interact
with and manage multiple running processes within a terminal environment?
Answer
While the shell itself can only execute one foreground process at a time, you can
leverage backgrounding or terminal multiplexers to create the illusion of running
multiple processes simultaneously within a terminal environment.

Question – 3
What are virtual devices?
Answer
Within device management, virtual devices are not actual physical components
like hard drives or printers. Instead, they're software constructs that emulate the
behavior and functionality of physical devices. The operating system treats them
similarly, allowing processes to interact with them using the same functions
(request, read, write) as with physical devices. Behind the scenes, the operating
system translates these requests into actions the underlying hardware can
understand. This approach offers advantages like flexibility – you can easily create
or delete virtual devices – and isolation – they can improve security by separating
processes from the raw hardware. Virtual devices are a valuable tool for
managing resources and providing a consistent interface for processes to interact
with both hardware and software components.

Question – 4
Why is process management important?
Answer
Process management offers control over resource allocation, promotes system
stability by allowing termination of malfunctioning processes, and enhances
security by restricting unauthorized processes.

Question – 5
Deadlocks are a potential hazard in multiprogramming environments. What is a
deadlock, and how can operating systems prevent them?
Answer
A deadlock occurs when two or more processes are permanently waiting for
resources held by each other. No process can proceed, creating a system stall.
Operating systems can prevent deadlocks using techniques like:
1. Resource ordering: Enforcing a specific order for requesting resources to avoid
conflicts.
2. Preemption: Taking away a resource from a process if it's holding up others and
granting it later.
3. Timeout mechanisms: Setting time limits for processes waiting for resources to
prevent indefinite waits.
1. QUESTION:
2. QUESTION:
3. QUESTION:

OS ASSIGNMENT 1
QUESTIONS FROM CHAPTER 1, AND 2
Q1) How does the use of a table of pointers to interrupt routines improve the
efficiency of interrupt handling in computer architectures, and what role does low
memory play in this mechanism?
Ans) Utilizing a table of pointers to interrupt routines enhances efficiency by
enabling direct access to specific interrupt service routines without the overhead of
intermediate routines. Low memory storage facilitates quick access to these
pointers.
Q2) In implementation of CLI in OS, we have two methods. One is in which all
commands are defined in separate executable file. So, in this case when a command
is entered by user. How is this command executed?
Ans) The OS will traverse through all the executable files (of commands) and search
for the required one and a new process will be started which will be loaded in RAM
and then the command file will be executed.
Q3) Explain the importance of saving and restoring the state information during
interrupt handling in computer architecture. How does this ensure the proper
continuation of interrupted computations after the servicing of interrupts?
Ans) Saving and restoring state information during interrupt handling ensures
seamless continuation of interrupted computations by preserving the context of the
interrupted process, including register values. This allows the interrupted
computation to resume from the exact point it was interrupted, maintaining system
integrity and functionality.
Q4) What happens when a user program requires privillaged services?
Ans) Kernel runs. The kernel verifies whether the user program has the necessary
permissions to perform the requested operation. If the program does not have
sufficient privileges, the kernel denies the request and generates an error. However,
if the program has the required permissions, the kernel executes the requested
operation on behalf of the user program.
Q5)What is the need of local buffer storage in device controllers?
Ans) Local buffers allow for smoother and more efficient data transfer between the
device and the CPU. Instead of transferring data byte by byte directly between the
device and the CPU, which can be slow and inefficient due to differences in data
4. QUESTION:

transfer rates, the device controller can collect data in its local buffer and then
transfer it in larger, more efficient chunks.
Q6) Star topology of OS structure occupies too much space and all the modules are
loaded in kernel space. Devise a solution.
Ans) Load only those modules in RAM which are required when PC is powered ON.
For example, basic kernel. Then load one-by-one only the modules that are needed.

How does a computer's architecture influence its ability to multitask


effectively, and what are some real-world examples where understanding this
architecture is crucial for optimizing task performance?

ANSWER: A computer's architecture, especially its CPU design, is


instrumental in determining its multitasking capabilities. For
instance, multi-core processors enable computers to handle
multiple tasks simultaneously by distributing the workload across
different cores. Additionally, features like hyper-threading allow
each core to manage multiple threads concurrently, further
enhancing multitasking efficiency. Understanding this architecture is
vital for optimizing task performance in various scenarios. In server
environments with concurrent user access, a robust multi-core CPU
ensures smooth operation without performance degradation.
Similarly, in gaming, where tasks like rendering and AI processing
occur concurrently, a powerful CPU with multiple cores guarantees
seamless gameplay without interruptions. Moreover, in data centres
managing diverse workloads, an efficient multitasking architecture
ensures optimal resource utilization and application responsiveness,
leading to enhanced efficiency and cost-effectiveness. Overall,
grasping a computer's architecture enables the design of efficient
software, effective resource allocation, and maximization of
multitasking performance across different applications and
industries.
5. QUESTION:

Multitask architecture models.

• Soft training: where each task has its own parameters and model, this is distance
regularized to encourage distances to be similar.

• Alternate training: this model allows sharing of information between tasks,

• Joint training: this model allows different parts of the model to share parts of their
structure in addition to data statistics.

QUESTION: How do operating system operations like file management and memory
allocation impact the user experience on a day-to-day basis, and what are some common
challenges users might encounter if these operations are not efficiently handled by the
OS?
ANSWER: Operating system operations like file management and memory allocation
have a direct impact on the user experience. Efficient file management ensures users
can access, organize, and manipulate their data easily, while proper memory
allocation ensures smooth application performance.

If these operations are not efficiently handled by the OS, users may face challenges
such as difficulty in finding files, which wastes time and reduces productivity.
Moreover, inefficient memory allocation can lead to system slowdowns, freezes, or
crashes, disrupting the user experience and causing frustration.

In essence, efficient file management and memory allocation are crucial for providing
a seamless user experience, and any inefficiencies in these operations can result in
decreased productivity and frustration for users.
6. QUESTION:

File system in operating system.

How does the design of the user interface impact the accessibility and
usability of operating systems for diverse user demographics, and what are some strategies
employed by OS designers to improve user interaction and workflow efficiency?

ANSWER: The design of the user interface (UI) significantly impacts the accessibility
and usability of operating systems across diverse user demographics. A well-designed UI
considers factors such as ease of navigation, clarity of presentation, and customization
options to accommodate different user preferences and needs. OS designers employ
various strategies to improve user interaction and workflow efficiency, including intuitive
menu structures, visual cues for guidance, keyboard shortcuts for power users, and
accessibility features such as screen readers and voice commands. By prioritizing user
experience and incorporating user feedback, OS designers strive to create interfaces that
are inclusive, user-friendly, and conducive to efficient task execution for all users.
7. QUESTION:

Design And Development Strategies To Provide Better Accessibility And Animation


Using UX/UI
8. QUESTION:

In what ways do system calls bridge the gap between user applications
and the operating system, and why are they essential for enabling functionalities such as process
execution, file manipulation, and hardware control?

ANSWER: System calls serve as an interface between user applications and the operating system,
facilitating communication and enabling access to OS resources and functionalities. When a user
application requires OS services such as process execution, file manipulation, or hardware control, it
makes requests to the OS through system calls. System calls handle tasks such as memory allocation,
input/output operations, and device management on behalf of user applications, ensuring proper
resource utilization and security enforcement. By abstracting complex OS functionalities into simple
interfaces, system calls shield user applications from the intricacies of the underlying hardware and
software, promoting portability and interoperability across different computing environments. Thus,
system calls are essential for enabling diverse functionalities within user applications while
maintaining system integrity and security.

System call
9. QUESTION:

How do operating system design and implementation impact system


performance and user experience?

ANSWER: Operating system design and implementation significantly influence system performance
and user experience. A well-designed and efficiently implemented operating system can optimize
resource utilization, minimize latency, and enhance overall system responsiveness. This directly
translates into a smoother and more responsive user experience, with faster application loading times,
quicker response to user inputs, and reduced system downtime. Conversely, poor design choices or
inefficient implementation can lead to performance bottlenecks, system crashes, and user frustration.
Therefore, careful consideration of design principles and implementation strategies is crucial for
delivering a reliable and high-performance operating system.

Question No 1:

Explain the concept of dynamic linking and its benefits?

Answer:

Dynamic linking:

Dynamic linking is a mechanism where the linking of executable code with libraries occurs
at runtime rather than at compile time. In dynamic linking, libraries (also known as shared
libraries or dynamic link libraries) are linked with an executable when it is loaded into
memory by the operating system, or even during runtime as needed.
10. QUESTION:

Benefits of Dynamic Linking:

1.Reduced Memory Usage:

Dynamic linking allows multiple programs to share a single copy of a library in memory.
This results in reduced memory usage as compared to static linking, where each program
has its own copy of the library.

2. Simplified Updates:

When a shared library is updated or patched, all programs that use it automatically gain
access to the updated version upon their next execution, without needing to be
recompiled.

3. Faster Program Startup:

Since the linking of shared libraries is deferred until runtime, the startup time of programs
may be faster compared to programs statically linked with all necessary libraries.

4. Easier Distribution:

Dynamic linking allows for smaller executable file sizes since they do not need to contain
the entire library code. This can simplify the distribution of software packages.

5. Flexibility:

Dynamic linking enables flexibility in the use of libraries. Different programs can use
different versions of the same library, or even substitute alternative implementations of a
library at runtime based on specific requirements or user preferences.

Question No 2:

Discuss the role of system call tables in the implementation of system calls.
11. QUESTION:

Answer:

System call tables are data structures used by the operating system to map system call
numbers or names to the corresponding kernel functions. When a user-level process
invokes a system call, the system call number or name is used as an index into the system
call table to determine the appropriate kernel function to execute. This indirection allows
the operating system to efficiently dispatch system calls and provides a layer of abstraction
between user-level processes and kernel functions. System call tables are crucial for
maintaining the integrity and security of the operating system, as they ensure that only
authorized system calls can be invoked by user processes. Additionally, system call tables
facilitate portability across different architectures by abstracting the implementation
details of system calls from the user-level interface. Overall, system call tables play a vital
role in the efficient and secure operation of an operating system.

Question no 3:

Explain the concept of system call overhead and its impact on the performance of
applications.

Answer:

System call overhead refers to the additional time and resources required to switch from
user mode to kernel mode and back again when making a system call. This overhead
includes context switching, privilege level changes, and the execution of kernel code to
handle the system call request. System call overhead can impact the performance of
applications, especially those that make frequent system calls, by introducing delays and
consuming CPU cycles. Minimizing system call overhead is essential for improving
application performance, and this can be achieved through optimization techniques such
as batching multiple system calls, reducing the frequency of system calls, and using
efficient system call implementations.
Question no 4

Explain the concept of shared memory as a mechanism for IPC?

ANSWER:

Shared memory, as an interprocess communication (IPC) mechanism, allows multiple


processes to access a common area of memory, facilitating fast and efficient data
exchange through direct memory access without kernel involvement. Processes
communicate by reading from and writing to shared memory locations, enabling high-
12. QUESTION:

speed communication channels. However, shared memory IPC necessitates careful


synchronization to prevent race conditions and maintain data integrity, requiring processes
to coordinate access using synchronization primitives like semaphores or mutexes. Despite
the need for synchronization, shared memory IPC remains a powerful tool for scenarios
requiring high performance and low latency communication between processes.

Question:5

What is process scheduling in operating systems, and why is it necessary?

Answer:

Process scheduling in operating systems refers to the mechanism by which the operating
system decides which process to execute next on the CPU. It involves selecting processes
from the ready queue and allocating CPU time to them based on scheduling algorithms. A
conceptual question about process scheduling could be: "How do different scheduling
algorithms, such as First Come First Serve (FCFS) and Round Robin, impact system
performance and responsiveness?" This question prompts discussion about the various
scheduling algorithms, their advantages, disadvantages, and how they influence factors
like throughput, turnaround time, and fairness in resource allocation.
13. QUESTION:

4-1oorłsk Ahmad

: blhał ore 8k-0Î2A process îes *hroużh h an Te..roRnÎ and


Who* eacL.
14. QUESTION:

Crea-Qccl, recăd ho

Qno.3

proce.ô-s an seđsłern ffCô -fev-e ma.lîn Sł-cxff„ô :

e—L-ĄoĄ _

ff a..L3

• rcd-0

eau•ly re.C%,
Ooa.b b
aåeLd
Destbn we

qooLs reo.zonô peop(e u-ô-e some.żtLînq

Scanned with CamScanner


15. QUESTION:

qoato t a-n os
Ono. s we COLI.'
, ebu%rn.eÆ gt%f-em
dap -la-brkdand
Nhat are Process -thea hde.wvcJud '
haye å(-uouedJ rfypea 0b
an ccno( proce»s creed-ton : Tree )

CHAIN

-htneo O.- oaca..m,


how proc.useo and/ clew'(d processes br creo.±d ?

toe CCUv ce04e..ö a-hd clag


fixCcC) S 10M

Fu€ cLÆcl processes :


9S-å 31
Scanned with CamScanner
16. QUESTION:

canc
On :LAIha .(
o
±

Scan
ned
with
Cam
Scan
ner

You might also like