think of it like this:
a CPU can only do certain instructions (add, subtract, multiply,...)
Now if an instruction is loaded into the CPU it is put in a queue since a CPU can do only one thing at a time. (actually there are sevreal queues and waiting strategies for process switching)
look at the 1st PP slides now one core means that you can do only one thing at a time. (because the CPU is so fast it looks like you are running and doing multiple things at a time)
If you have a dual core processor it can do 2 things at a time. But there are problems that can come with it.
original program:
add 1 to i
add 1 to i
write to memory
CORE 1
0:00:00 add 1 to i
0:00:01 write to memory
CORE 2
0:00:02 add 1 to i
Now assume that core 2 was buzy with other stuff and that te instruction of add 1 to i was delayed. Core one will write 1 to the memory whikle it had to be 2. thats why theire needs to be a whole lot of locking mechanisms, algoritmes to prevent this from happening.
Now it is mostly used to run processes that have noting to do with each other on the cores.